¿Qué es particionar en chispa, por qué lo necesitamos?

¿Qué es una partición en Spark?

Como sabemos, Spark RDD es una colección de varios elementos de datos que son tan grandes que no pueden caber en un solo nodo y deben dividirse en varios nodos. Spark divide automáticamente los RDD y distribuye las particiones en diferentes nodos. Una partición en chispa es una porción atómica de datos (división lógica de datos) almacenada en un nodo en el clúster. Las particiones son unidades básicas de paralelismo en Apache Spark. Los RDD en Apache Spark son una colección de particiones.

¿Por qué usar un particionador?

En la computación en clúster , el desafío central es minimizar el tráfico de red. Cuando los datos están orientados al valor clave, la partición se vuelve imprescindible porque para las transformaciones posteriores en el RDD , hay una buena cantidad de mezcla de datos a través de la red. Si se almacenan claves similares o un rango de claves en la misma partición, entonces la combinación aleatoria se minimiza y el procesamiento se vuelve sustancialmente rápido.

Las transformaciones que requieren barajar los datos entre los nodos de trabajo se benefician enormemente de la partición. Dichas transformaciones son cogroup, groupWith, join, leftOuterJoin, rightOuterJoin, groupByKey, reduceByKey, combineByKey y lookup .

Crear una partición en Spark

Tomemos un ejemplo simple que crea una lista de 30 enteros con 3 particiones:

integer_RDD = sc.parallelize (rango (30), 3)

Básicamente hay dos tipos de particionamiento en spark:

Particionamiento de hash en Spark

La partición hash intenta distribuir los datos de manera uniforme en varias particiones en función de la clave. El método Object.hashCode se usa para determinar la partición en Spark como partición = key.hashCode ()% numPartitions.

Particionamiento de rango en Spark

Algunos RDD de Spark tienen claves que siguen un orden particular, para tales RDD, la partición de rango es una técnica de partición eficiente. En el método de partición de rango, las tuplas que tienen claves dentro del mismo rango aparecerán en la misma máquina. Las claves en un divisor de rango se dividen en función del conjunto de rango ordenado de claves y el orden de las claves.

pruebe sus conocimientos sobre chispas, consulte el enlace: Preguntas y respuestas sobre las 50 mejores entrevistas de Apache Spark

Una partición en Spark es un conjunto atómico de datos con el que trabaja en un momento dado.

Una partición también es una tirada de datos que se almacenan en un nodo en el Clúster / Nube.

Digamos, por ejemplo, que creamos una lista de enteros y la dividimos en 3 partes.

integer_RDD = sc.parallelize (rango (10), 3)

Aquí le pedimos a Spark que cree una lista de 10 números y los almacene distribuidos en 3 particiones.

Si desea ver las particiones, una operación de acción en el RDD como se muestra a continuación puede mostrarle las particiones que creó.

integer_RDD.glom (). collect ()

Fuera: [[0,1,2], [3,4,5], [6,7,8,9]]

Alternativamente, si desea reducir las particiones en los datos, puede hacer lo siguiente.

integer_RDD.coalesce (2) .glom (). collect ()

Fuera: [[0,1,2,3], [4,5,6,7,8,9]]

La razón principal por la que existe la partición es para el escalado horizontal tanto de cómputo como de datos. El concepto principal de MapReduce: mover el cálculo a datos / particiones