tutorial spark significado resilient reducebykey position apache-spark rdd

position - spark - resilient distributed dataset



¿Cómo puedo obtener una posición de elemento en el RDD de Spark? (2)

Básicamente, el método zipWithIndex () de RDD parece hacer esto, pero no conservará el orden original de los datos a partir de los cuales se creó el RDD. Al menos obtendrás un orden estable.

val orig: RDD[String] = ... val indexed: RDD[(String, Long)] = orig.zipWithIndex()

La razón por la que es poco probable que encuentre algo que preserve el orden en los datos originales está enterrada en el documento API para zipWithIndex ():

"Comprime este RDD con sus índices de elementos. El orden se basa primero en el índice de partición y luego en el orden de los elementos dentro de cada partición. Por lo tanto, el primer elemento en la primera partición obtiene el índice 0 y el último en la última índice más grande. Es similar al zipWithIndex de Scala, pero usa Long en lugar de Int como tipo de índice. Este método necesita desencadenar un chispazo cuando este RDD contiene más de una partición ".

Por lo tanto, parece que el pedido original se descarta. Si preservar el orden original es importante para usted, parece que necesita agregar el índice antes de crear el RDD.

Soy nuevo en Apache Spark, y sé que la estructura de datos básicos es RDD. Ahora estoy escribiendo algunas aplicaciones que requieren información posicional del elemento. Por ejemplo, después de convertir un ArrayList en un RDD (Java), para cada entero en RDD, necesito saber su subíndice de matriz (global). ¿Es posible hacer lo?

Como sé, hay una función take (int) para RDD, así que creo que la información posicional todavía se mantiene en RDD.


Creo que en la mayoría de los casos, zipWithIndex () hará el truco, y preservará el orden. Lee los comentarios nuevamente Entiendo que eso significa exactamente mantener el orden en el RDD.

scala> val r1 = sc.parallelize(List("a", "b", "c", "d", "e", "f", "g"), 3) scala> val r2 = r1.zipWithIndex scala> r2.foreach(println) (c,2) (d,3) (e,4) (f,5) (g,6) (a,0) (b,1)

Ejemplo anterior confirmarlo. El rojo tiene 3 particiones y a con el índice 0, b con el índice 1, etc.