Comportamiento de particionador aleatorio en el RDD unido

Estoy tratando de unir dos conjuntos de datos. Uno de tipo (Id, salesRecord) otro (Id, Nombre). El primer conjunto de datos está particionado por HashPartitioner y el segundo está particionado por Particionador personalizado. Cuando me uno a estos RDD por id e intento ver qué información de partición se conserva, veo al azar que a veces joinRDD muestra un particionador personalizado y, a veces, HashPartitioner. Recibí diferentes resultados de partición al cambiar la cantidad de particiones también.

De acuerdo con el libro Learning Spark, rdd1.join (rdd2) retiene la información de partición de rdd1.

Aquí está el código.

  val hashPartitionedRDD = cusotmerIDSalesRecord.partitionBy(new HashPartitioner(10))
println("hashPartitionedRDD's partitioner " + hashPartitionedRDD.partitioner) // Seeing Instance of HashParitioner

val customPartitionedRDD = customerIdNamePair1.partitionBy(new CustomerPartitioner)
println("customPartitionedRDD partitioner " + customPartitionedRDD.partitioner) // Seeing instance of CustomPartitioner

val expectedHash = hashPartitionedRDD.join(customPartitionedRDD)
val expectedCustom = customPartitionedRDD.join(hashPartitionedRDD)

println("Expected Hash " + expectedHash.partitioner) // Seeing instance of Custom Partitioner
println("Expected Custom " + expectedCustom.partitioner) //Seeing instance of Custom Partitioner

// Just to add more to it when number of partitions of both the data sets I made equal I am seeing the reverse results. i.e. 
// expectedHash shows CustomPartitioner and 
// expectedCustom shows Hashpartitioner Instance.

Respuestas a la pregunta(1)

Su respuesta a la pregunta