Spark:使用自定义分区程序强制两个RDD [Key,Value]和共同定位的分区

时间:2016-02-08 14:08:48

标签: hash apache-spark partitioning shuffle

我有两个RDD[K,V],其中K=LongV=Object。让我们拨打rdd1rdd2。我有一个共同的自定义分区程序。我试图通过避免或最小化数据移动来找到一种方法来unionjoin

val kafkaRdd1 = /* from kafka sources */
val kafkaRdd2 = /* from kafka sources */

val rdd1 = kafkaRdd1.partitionBy(new MyCustomPartitioner(24))
val rdd2 = kafkaRdd2.partitionBy(new MyCustomPartitioner(24))

val rdd3 = rdd1.union(rdd2) // Without shuffle
val rdd3 = rdd1.leftOuterjoin(rdd2) // Without shuffle

在同一个nth-Partition节点上假设(或强制执行)rdd1rdd2 slave是否安全?

1 个答案:

答案 0 :(得分:9)

无法在Spark中强制执行*托管,但您使用的方法将最大限度地减少数据移动。创建i时,将分析输入PartitionerAwareUnionRDD,以根据每个位置的记录数选择最佳输出位置。有关详细信息,请参阅getPreferredLocations方法。

*根据High Performance Spark

  

如果两个RDD具有相同的分区并且作为同一操作的一部分进行洗牌,则它们将被并置。