apache-spark - read - spark sql example
Spark: Encuentre cada tamaño de partición para RDD (2)
¿Cuál es la mejor forma de encontrar el tamaño de cada partición para un RDD dado? Estoy intentando depurar un problema de Partición sesgada, lo he intentado:
l = builder.rdd.glom().map(len).collect() # get length of each partition
print(''Min Parition Size: '',min(l),''. Max Parition Size: '', max(l),''. Avg Parition Size: '', sum(l)/len(l),''. Total Partitions: '', len(l))
Funciona bien para RDD pequeños, pero para RDD más grandes, da error OOM. Mi idea es que glom()
está causando que esto suceda. Pero de todos modos, ¿solo quería saber si hay alguna forma mejor de hacerlo?
Utilizar:
builder.rdd.mapPartitions(lambda it: [sum(1 for _ in it)])
Si bien la respuesta de @LostInOverflow funciona muy bien. He encontrado otra manera de encontrar el tamaño y el índice de cada partición, utilizando el siguiente código. Gracias a esta increíble publicación.
Aquí está el código:
l = test_join.rdd.mapPartitionsWithIndex(lambda x,it: [(x,sum(1 for _ in it))]).collect()
y luego puedes obtener las particiones de tamaño máximo y mínimo usando este código:
min(l,key=lambda item:item[1])
max(l,key=lambda item:item[1])
Al encontrar la clave de la partición asimétrica, podemos depurar aún más el contenido de esa partición, si es necesario.