众所周知,Spark中的分区对任何“宽”操作都有巨大的性能影响,所以它通常是在操作中定制的。我正在使用以下代码进行实验:
val rdd1 =
sc.parallelize(1 to 50).keyBy(_ % 10)
.partitionBy(new HashPartitioner(10))
val rdd2 =
sc.parallelize(200 to 230).keyBy(_ % 13)
val cogrouped = rdd1.cogroup(rdd2)
println("cogrouped: " + cogrouped.partitioner)
val unioned = rdd1.union(rdd2)
println("union: " + unioned.partitioner)
我发现在默认情况下,cogroup()
总是生成带有自定义分区工具的RDD,但union()
并非如此,它总是会恢复到默认状态。这是违反直觉的,因为我们通常假设PairRDD应该使用它的第一个元素作为分区键。有没有办法“强制”Spark合并2个PairRDD来使用相同的分区键?
https://stackoverflow.com/questions/29977526
复制相似问题