Hadoop、Spark(Java、scala)实现分组、排序

 

1. MapReduce实现分组、排序

1.1分组

//在MapReduce 主类设置自定义分组Class
job.setGroupingComparatorClass((Class<? extends RawComparator> cls);

//实例
job.setGroupingComparatorClass(S1apEnbidGroupingComparator.class);

1.2 排序

//自定义二次排序策略
job.setSortComparatorClass(Class<? extends RawComparator> cls)

//实例
job.setSortComparatorClass(S1apEnbidSortComparator.class);

 

2.Java版Spark实现分组、排序

//分组
JavaPairRDD.groupByKey(reducenum);

key重写hashCode()和equals()

//value排序
groupByKey.mapToPair(new PairFunction<Tuple2<SparkLocatorCombinedKey,Iterable<String>>, SparkLocatorCombinedKey, Iterable<String>>() {

	private static final long serialVersionUID = 8988893168013930479L;

	@Override
	public Tuple2<SparkLocatorCombinedKey, Iterable<String>> call(
			Tuple2<SparkLocatorCombinedKey, Iterable<String>> tuple2) throws Exception {
		List<String> list = copyIterator(tuple2._2.iterator());
		Collections.sort(list, new SecondSortByTimeComparator());
		return new Tuple2<SparkLocatorCombinedKey, Iterable<String>>(tuple2._1, list);
	}
});

//Iterable => Iterator => List
public static <T> List<T> copyIterator(Iterator<T> iter) {
	List<T> copy = new ArrayList<T>();
	while (iter.hasNext())
		copy.add(iter.next());
	return copy;
}
// List => Iterable 多态

//SecondSortByTimeComparator 

 

3.scala版Spark实现分组、排序

//分组 与Java一样 也是hashCode()和equals()
rdd.groupByKey(reduceNum)
//value排序
rdd.mapValues(iterable => {
        iterable.toList.sortBy(sortRule)
    })

//sortRule
def sortRule(employee: Employee): (Long, String) = {
    (employee.getTimeStamp, employee.getEmployeeID)
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值