有没有办法为Spark ReduceByKey函数提供Java Comparator?

时间:2016-05-17 22:05:44

标签: apache-spark

JavaPairRDD<KeyClass, ValueClass> rdd我的KeyClass有几个字段。

我想基于KeyClass中的一部分字段来减少偏移。我是通过映射RDD来做到的:

JavaPairRDD<String, Tuple2<KeyClass, ValueClass>> readyForReduce = rdd.MapToPair(addKey());

我知道我可以传入分区程序,但这只是确定记录的分区而不是它的减少方式。

此外,我不想覆盖KeyClass的哈希方法。

1 个答案:

答案 0 :(得分:0)

您已在无法执行列表中列出了所有可能的解决方案。但是,使用keyBy将导致代码更接近您想要实现的代码。请注意,您仍然会得到一对RDD

val readyToReduce = rdd.keyBy{case (k, v) => pickKeysYouWant(k)}

示例:

scala>  val a = sc.parallelize(List(((1, "adam"), "adams_info"), ((2, "bob"), "bobs_info")))

scala> a.collect.map(println)

scala> val readyToReduce = a.keyBy{case (key, value) => key._2}

scala> readyToReduce.collect.map(println)
(adam,((1,adam),adams_info))
(bob,((2,bob),bobs_info))