spark significado resilient lazy instalar coin apache-spark rdd

apache spark - significado - ¿Qué operaciones preservan el orden RDD?



rdd significado (1)

RDD tiene un orden significativo (a diferencia de algún orden aleatorio impuesto por el modelo de almacenamiento) si fue procesado por sortBy() , como se explica en esta reply .

Ahora, ¿qué operaciones preservan ese orden?

Por ejemplo, ¿se garantiza que (después de a.sortBy() )

a.map(f).zip(a) === a.map(x => (f(x),x))

Qué tal si

a.filter(f).map(g) === a.map(x => (x,g(x))).filter(f(_._1)).map(_._2)

qué pasa

a.filter(f).flatMap(g) === a.flatMap(x => g(x).map((x,_))).filter(f(_._1)).map(_._2)

Aquí "igualdad" === se entiende como "equivalencia funcional", es decir, no hay forma de distinguir el resultado utilizando operaciones a nivel de usuario (es decir, sin leer los registros & c).


Todas las operaciones conservan el orden, excepto las que no lo hacen explícitamente. Ordenar siempre es "significativo", no solo después de un sortBy . Por ejemplo, si lee un archivo ( sc.textFile ), las líneas del RDD estarán en el orden en que estaban en el archivo.

Sin intentar dar una lista completa, map , filter , flatMap y coalesce (with shuffle=false ) conservan el orden. sortBy , partitionBy , join no conserva el orden.

La razón es que la mayoría de las operaciones RDD funcionan en Iterator s dentro de las particiones. Por lo tanto, map o filter simplemente no tiene forma de desordenar el orden. Puedes echar un vistazo al code para verlo por ti mismo.

Ahora puede preguntar: ¿Qué pasa si tengo un RDD con un HashPartitioner ? ¿Qué sucede cuando uso el map para cambiar las claves? Bueno, se mantendrán en su lugar, y ahora el RDD no está particionado por la clave. Puede usar la partitionBy para restaurar la partición con una combinación aleatoria.