Los conjuntos de datos se están volviendo enormes. De hecho, los datos están creciendo más rápido que las velocidades de procesamiento. Por lo tanto, los algoritmos que involucran grandes cantidades de datos y una gran cantidad de cómputo a menudo se ejecutan en un sistema de cómputo distribuido. Un sistema de computación distribuida involucra Nodes (computadoras en red) que ejecutan procesos en paralelo y se comunican (si es necesario).
MapReduce : el modelo de programación que se utiliza para la computación distribuida se conoce como MapReduce. El modelo MapReduce consta de dos etapas, Map y Reduce.
- Mapa : el mapeador procesa cada línea de los datos de entrada (tiene la forma de un archivo) y produce pares clave-valor.
Input data → Mapper → list([key, value])
- Reduce : el reductor procesa la lista de pares clave-valor (después de la función Mapper). Produce un nuevo conjunto de pares clave-valor.
list([key, value]) → Reducer → list([key, list(values)])
Spark : Spark (motor de procesamiento de Big-Data de código abierto de Apache) es un sistema informático de clúster. Es más rápido en comparación con otros sistemas informáticos de clúster (como Hadoop). Proporciona API de alto nivel en Python, Scala y Java. Los trabajos paralelos son fáciles de escribir en Spark. Cubriremos PySpark (Python + Apache Spark), porque esto hará que la curva de aprendizaje sea más plana. Para instalar Spark en un sistema Linux, siga este . Para ejecutar Spark en un sistema de varios clústeres, siga este . Veremos cómo crear RDD (estructura de datos fundamental de Spark).
RDD (Conjuntos de datos distribuidos resistentes) : los RDD son una colección inmutable de objetos. Como estamos usando PySpark, estos objetos pueden ser de varios tipos. Estos se volverán más claros más adelante.
SparkContext : para crear una aplicación independiente en Spark, primero definimos un SparkContext:
from pyspark import SparkConf, SparkContext conf = SparkConf().setMaster("local").setAppName("Test") # setMaster(local) - we are doing tasks on a single machine sc = SparkContext(conf = conf)
Transformaciones RDD : ahora, se crea un objeto SparkContext. Ahora, crearemos RDD y veremos algunas transformaciones en ellos.
# create an RDD called lines from ‘file_name.txt’ lines = sc.textFile("file_name.txt", 2) # print lines.collect() prints the whole RDD print lines.collect()
Una de las principales ventajas de usar Spark es que no carga el conjunto de datos en la memoria, las líneas son un puntero al archivo ‘file_name.txt’ .
Una aplicación PySpark simple para contar el grado de cada vértice para un gráfico dado :
from pyspark import SparkConf, SparkContext conf = SparkConf().setMaster("local").setAppName("Test") # setMaster(local) - we are doing tasks on a single machine sc = SparkContext(conf = conf) def conv(line): line = line.split() return (int(line[0]), [int(line[1])]) def numNeighbours(x, y): return len(x) + len(y) lines = sc.textFile('graph.txt') edges = lines.map(lambda line: conv(line)) Adj_list = edges.reduceByKey(lambda x, y: numNeighbours(x, y)) print Adj_list.collect()
Entendiendo el código anterior –
- Nuestro archivo de texto tiene el siguiente formato: (cada línea representa un borde de un gráfico dirigido)
1 2
1 3
2 3
3 4
. .
. .
. .PySpark - Los conjuntos de datos grandes pueden contener millones de Nodes y bordes.
- Las primeras líneas configuran SparkContext. Creamos una línea RDD a partir de él.
- Luego, transformamos las líneas RDD en aristas RDD. La función conv actúa sobre cada línea y pares de valores clave de la forma (1, 2), (1, 3), (2, 3), (3, 4), … se almacenan en los bordes RDD.
- Después de esto , reduceByKey agrega todos los pares de claves correspondientes a una clave en particular y la función numNeighbors se usa para generar el grado de cada vértice en un RDD Adj_list separado , que tiene la forma (1, 2), (2, 1), (3, 1),…
Ejecutando el código –
- El código anterior se puede ejecutar con los siguientes comandos:
$cd /home/arik/Downloads/spark-1.6.0/ $./bin/spark-submit degree.py
- Puede usar su ruta de instalación de Spark en la primera línea.
Veremos más sobre cómo ejecutar tareas de MapReduce en un grupo de máquinas usando Spark, y también revisaremos otras tareas de MapReduce.
Referencias –
Este artículo es una contribución de Arik Pamnani . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA