tutorial spark significado resilient que data big join apache-spark partitioning shuffle rdd

join - spark - scala rdd map



Apache Spark: une dos RDD con diferentes particionadores (1)

Tengo 2 rdds con diferentes conjuntos de particiones.

case class Person(name: String, age: Int, school: String) case class School(name: String, address: String)

rdd1 es el RDD de Person , que he dividido según la age de la persona, y luego convertí la clave a la school .

val rdd1: RDD[Person] = rdd1.keyBy(person => (person.age, person)) .partitionBy(new HashPartitioner(10)) .mapPartitions(persons => persons.map{case(age,person) => (person.school, person) })

rdd2 es el RDD de la School agrupada por name de la escuela.

val rdd2: RDD[School] = rdd2.groupBy(_.name)

Ahora, rdd1 está dividido en función de la edad de la persona, por lo que todas las personas con la misma edad van a las mismas particiones. Y, rdd2 está particionado (por defecto) en función del nombre de la escuela.

Quiero rdd1.leftOuterJoin(rdd2) de tal forma que rdd1 no se mezcle porque rdd1 es muy grande en comparación con rdd2. Además, estoy enviando el resultado a Cassandra, que está particionado por age , por lo que la partición actual de rdd1 el proceso de escritura posterior.

¿Hay alguna manera de unir dos RDD sin: 1. rdd1 y 2. Transmitir ''rdd2'', porque rdd2 es más grande que la memoria disponible.

Nota: El rdd unido debe dividirse según la edad.


Supongamos que tiene dos rdds, rdd1 y rdd2 y desea aplicar la operación de unión. y si rdds tiene particiones (la partición está configurada). luego, llamar a rdd3 = rdd1.join (rdd2) hará que la partición rdd3 sea rdd1. rdd3 siempre tomará la partición hash de rdd1 (primer padre, el que se invocó a la combinación).