Definición


Es una transformación que nos permite reparticionar (como repartition) un RDD de acuerdo a un particionador y ordena los registros en base a su clave.

rdd = sc.parallelize(range(1, 11), 4)
rdd.map(lambda x: (x, x))
   .repartitionAndSortWithinPartitions(2)
   .glom()
   .collect()
# Devuelve [[(2, 2), (4, 4), (6, 6), (8, 8), (10, 10)],
#           [(1, 1), (3, 3), (5, 5), (7, 7), (9, 9)]]

Cuando aplicar normalmente esta repartición nos da unos registros muy desbalanceados, podemos incorporar una función de partición en partitionFunc

rdd = sc.parallelize(range(1, 11), 4)
rdd.map(lambda x: (2 * x, x))
   .repartitionAndSortWithinPartitions(2)
   .glom()
   .collect()
# Devuelve [[(2, 1), (4, 2), (6, 3), (8, 4), (10, 5), (12, 6), (14, 7), (16, 8), (18, 9), (20, 10)], []]
 
rdd.map(lambda x: (2 * x, x))
   .repartitionAndSortWithinPartitions(2, partitionFunc = lambda x: (x % 3))
   .glom()
   .collect()
# Devuelve [[(2, 1), (6, 3), (8, 4), (12, 6), (14, 7), (18, 9), (20, 10)],
#           [(4, 2), (10, 5), (16, 8)]]