¿Has escuchado sobre big data? En esta publicación puedes saber un poco al respecto, pero como su nombre lo indica son grandes volúmenes de datos y no solo eso, son datos de diferentes fuentes, variados y generados a gran velocidad. Al ser una cantidad de datos enorme se dificulta su manipulación, es por ello que aparece Spark, una de las herramientas más utilizadas para big data.
Apache Spark es un framework para ejecutar código en paralelo en muchas máquinas diferentes, esto se conoce como procesamiento distribuido. Spark es responsable de orquestar, distribuir y monitorear aplicaciones que constan de múltiples tareas de procesamiento de datos sobre varias máquinas de trabajo, que forman un clúster.
Tenemos una idea de que es Spark y cómo funciona. ¿Por qué es importante?
Trabajar con grandes volúmenes de datos puede ser complicado porque estos requieren mayor procesamiento y puede ser un proceso lento. Spark trabaja de una forma distribuida, lo que hace que procesar grandes volúmenes de datos e implementar modelos con estos se vuelve más rápido. Además, facilita la integración con sistemas de almacenamiento como HDFS de Hadoop, S3 de AWS, Cassandra, HBase y MongoDB. De esta manera Spark se convierte en una herramienta muy útil cuando estamos trabajando con big data, ya que nos facilita el procesamiento de datos, análisis e implementación de modelos cuando tenemos mucha información.
Hablemos un poco de la arquitectura de Spark:
Controlador
El controlador se compone del programa, como una aplicación de consola de C#, y una sesión de Spark. La sesión de Spark toma el programa y lo divide en tareas más pequeñas controladas por los ejecutores.
Ejecutores
Cada ejecutor, o nodo de trabajo, recibe una tarea del controlador y la ejecuta. Los ejecutores residen en una entidad conocida como clúster. Los trozos de código propio de los que se encargan estos ejecutores son denominados tasks o tareas.
Administrador de clústeres
El administrador de clústeres se comunica con el controlador y los ejecutores para:
- Administrar la asignación de recursos
- Administrar la división de programas
- Administrar la ejecución de programas
Así que Spark es un aliado cuando trabajamos con datos, pero ¿cómo utilizarlo? Python nos trae una librería que nos permite utilizar Spark en nuestros datos, es PySpark.
PySpark nos permite realizar tareas similares a Pandas como leer un archivo, seleccionar columnas, crear filtros, entre otros. Además, soporta Spark SQL, DataFrame, Streaming, MLlib (para uso de Machine Learning) y Spark Core.
¡Manos a la obra con PySpark!
Instalar PySpark
pip install pyspark #Instalar con Pythonconda install pyspark #Instalar usando Anaconda
Con SparkContext creamos una conexión a Spark y realizamos su configuración
from pyspark import SparkConf, SparkContext
conf = (SparkConf().setMaster('local').setAppName('nombre')
spark = SparkContext(conf = conf)
Crear la estructura de un dataframe
schema = StructType([
StructField(“columna1”, StringType(), True),
StructField(“columna2”, IntegerType(), True)]) #Definir la estructura del dataframedatos = spark.createDataFrame(rdd, schema) #Crear la estructura del DataFrame
Leer un archivo
#Forma 1
datos = spark.read.csv('ruta_archivo', header=True)#Forma 2
datos = spark.read.load('ruta_archivo', format='formato')
Mostrar información de los datos leídos
datos.show(N) #Muestra las N primeras líneas del dataframedatos.display() #Muestra datos en forma aleatoria
Mostrar el esquema del dataframe
datos.printSchema() #Muestra las columnas y tipo de dato datos.dtypes #Muestra el tipo de dato de las columnasdatos.columns #Muestra las columnas del dataframe
Para ver algunas medidas de tendencia central de las columnas
datos.describe().show()
Manejo de fechas
current_date() #El día actual como una columna tipo fechadayofweek(e:'columna') #Muestra el dia de la semana (1:Domingo, 7:Sabado) dayofmonth(e:'columna') #Muestra el día del mes como un entero date_add(start:'columna', days:numero_entero) #Muestra la fecha que corresponde al día después de la fecha de inicio ('start')
Eliminar una columna
datos.drop(‘columna’)
Unión de tablas
datos.join(datos2, on=[‘columna_llave’], how=’tipo_join’)
Manejo de datos nulos
datos.na.drop() #Eliminar datos nulosdatos.na.replace('valor_anterior','valor_nuevo') #Reemplazar datos nulos
Trabajar con los datos usando pandas
datos.toPandas() #Convertir a Pandas dataframe
Manipular datos usando consultas SQL
datos.createOrReplaceTempView(“nombre_tabla”) #Crear una vistaspark.sql(“consulta_SQL”).show() #Hacer consulta
Guardar datos en un archivo
datos.write.csv(‘nombre.csv’)
Otras funciones importantes
datos.select(‘nombres_columnas’).show() #Seleccionar columnas especificas del dataframedatos.withColumn('nombre_columna_nueva', 'nombre_columna_anterior o operaciones_columnas_existentes') #Crear o actualizar columnas en el dataframedatos.filter(condición) #Filtrar los datos del dataframedatos.where(condición).show() #Seleccionar columnas que cumplan con la condicióndatos.orderBy(F.asc(‘columna’)) #Ordenar los datos por la columna en el orden que se le indiquedatos.sort(F.col(‘columna’).asc())#Ordenar los datos por la columna en el orden que se le indique
Para finalizar, debes cerrar la sesión de Spark
spark.stop()
Recursos recomendados:
Esta publicación la hicimos en compañía de Valentina Ariza, ella es ingeniera en telecomunicaciones por profesión e ingeniera de datos por pasión. Tiene experiencia comprobable en la construcción de pipelines, ETL’s, herramientas de automatización para abordar problemas de arquitectura y escalabilidad entre otros requerimientos e implementaciones de soluciones end-to-end basadas en datos. Certificada en Microsoft Data Fundamentals, Developer Essentials y Foundations en Databricks. Le gusta el cine, estudiar y los atardeceres. La pueden contactar en redes como @valearizag
Gracias por leernos.
Hecho con ❤