【发布时间】:2015-07-10 17:36:30
【问题描述】:
众所周知,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 以使用相同的分区键?
【问题讨论】:
标签: apache-spark partitioning hadoop-partitioning