Как все знают, что разделители в 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 для использования одного и того же ключа раздела?