我JavaPairRDD<KeyClass, ValueClass> rdd
我的KeyClass
有几个字段。
我想基于KeyClass
中的一部分字段来减少偏移。我是通过映射RDD来做到的:
JavaPairRDD<String, Tuple2<KeyClass, ValueClass>> readyForReduce = rdd.MapToPair(addKey());
我知道我可以传入分区程序,但这只是确定记录的分区而不是它的减少方式。
此外,我不想覆盖KeyClass的哈希方法。
答案 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))