Al mal tiempo, buena data
4 min readNov 20, 2021

¿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:

Tomado de spark.apache.org

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 dataframe
datos = 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 ❤

No responses yet