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

Moh*_*itt 6 hash partitioning shuffle apache-spark

我有两个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
Run Code Online (Sandbox Code Playgroud)

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

zer*_*323 9

无法在Spark中强制执行*托管,但您使用的方法将最大限度地减少数据移动.当PartitionerAwareUnionRDD创建输入RDDs进行分析,以选择基于对每个位置的记录数最佳输出位置.详见getPreferredLocations方法.


*根据High Performance Spark

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