众所周知,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来使用相同的分区键?
发布于 2019-04-26 05:17:20
这不再是真的了。如果两个union
具有完全相同的分区程序和分区数量,则RDD也将具有这些相同的分区。这是在https://github.com/apache/spark/pull/4629中引入的,并被合并到Spark 1.3中。
https://stackoverflow.com/questions/29977526
复制相似问题