¿Qué operaciones conservan el orden RDD?


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

Ahora, ¿qué operaciones mantienen ese orden?

Por ejemplo, ¿es garantizado que (después de a.sortBy())

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

¿Qué tal

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

¿Qué pasa con

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 manera para distinguir el resultado utilizando operaciones a nivel de usuario (es decir, sin leer registros y c).

Author: Community, 2015-03-26

1 answers

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

, Sin tratar de dar una lista completa, map, filter, flatMap, y coalesce (con shuffle=false) no conservar el orden. sortBy, partitionBy, join no conserve el orden.

La razón es que la mayoría de las operaciones RDD funcionan en Iterator s dentro de la partición. Así que map o filter simplemente no tiene forma de estropear el orden. Usted puede echar un vistazo a la código para verlo por ti mismo.

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

 44
Author: Daniel Darabos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-29 20:56:09