如何访问reduceByKey和combineByKey中使用的两个关键对象?

时间:2015-12-09 01:41:36

标签: apache-spark

reduceByKey和combineByKey使用Function2来聚合相同键的计数。由于Function2仅传递了键的当前计数,因此如何访问与reduceByKey和combineByKey一起使用的实际两个键对象?

2 个答案:

答案 0 :(得分:0)

Tuple2 中的两个键合并,然后您就可以轻松执行reduceByKey和combineByKey

以下是示例

JavaRDD<Tuple3<String,String,Integer>> data = { .... };
JavaPairRDD<Tuple2<String, String>, Integer> map = data.mapToPair(new PairFunction<Tuple3<String,String,Integer>, Tuple2<String,String>, Integer>() {
    @Override
    public Tuple2<Tuple2<String, String>, Integer> call(Tuple3<String, String, Integer> t) throws Exception {
        return new Tuple2<Tuple2<String, String>, Integer>(new Tuple2<String, String>(t._1(),t._2()),t._3());
    }
});

map.reduceByKey(new Function2<Integer, Integer, Integer>() {
    @Override
    public Integer call(Integer v1, Integer v2) throws Exception {
        return v1+v2;
    }
});

答案 1 :(得分:0)

我找到了解决方案。谢谢,Kaushal和Justin,以前的回复。