Почему в Apache Spark RDD.union не сохраняет разделитель?
Как всем известно, разделители в 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()
всегда выдает СДР с настроенным разделителем, ноunion()
нет, он всегда вернется к значению по умолчанию. Это нелогично, поскольку мы обычно предполагаем, что PairRDD должен использовать свой первый элемент в качестве ключа раздела. Есть ли способ «заставить» Spark объединить 2 PairRDD для использования одного и того же ключа раздела?