In Apache Spark, warum behält RDD.union den Partitioner nicht bei?

Wie jeder weiß, haben Partitionierer in Spark enorme Auswirkungen auf die Leistung von "Wide" -Operationen, daher werden sie normalerweise in Operationen angepasst. Ich habe mit folgendem Code experimentiert:

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)

Ich sehe das standardmäßigcogroup() liefert immer eine RDD mit dem angepassten Partitionierer, aberunion() nicht, es wird immer auf die Standardeinstellung zurückgesetzt. Dies ist nicht intuitiv, da wir normalerweise davon ausgehen, dass ein PairRDD sein erstes Element als Partitionsschlüssel verwenden sollte. Gibt es eine Möglichkeit, Spark zu "zwingen", 2 PairRDDs zusammenzuführen, um denselben Partitionsschlüssel zu verwenden?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage