Comandos en Apache Spark SQL: Uso Práctico y Ejemplos
Clase 16 de 25 • Curso de Databricks: Arquitectura Delta Lake
Resumen
¿Cómo utilizar comandos SQL en Apache Spark?
En esta era del Big Data, manejar grandes volúmenes de datos de forma eficiente es crucial. Apache Spark es una herramienta invaluable en este sentido, y su módulo Spark SQL permite trabajar con datos estructurados usando comandos SQL, lo que hace que la transición sea fluida para quienes ya están familiarizados con SQL. La creación y manipulación de DataFrames, una representación en fila y columna, facilitan la consulta de datos estructurados.
¿Cómo crear y visualizar DataFrames?
Para empezar a trabajar con Spark SQL, es esencial crear DataFrames a partir de estructuras de datos conocidas, como diccionarios. Por ejemplo:
from pyspark.sql import SparkSession
# Crear una sesión de Spark
spark = SparkSession.builder.appName("Ejemplo").getOrCreate()
# Definición de datos
empleados = [{'ID': 1, 'Nombre': 'Juan', 'Departamento': 1, 'Salario': 3000},
{'ID': 2, 'Nombre': 'Ana', 'Departamento': 2, 'Salario': 4000}]
departamentos = [{'ID': 1, 'Nombre': 'Recursos Humanos'},
{'ID': 2, 'Nombre': 'Finanzas'}]
# Convertir a DataFrames
df_empleados = spark.createDataFrame(empleados)
df_departamentos = spark.createDataFrame(departamentos)
# Mostrar datos
df_empleados.show()
df_departamentos.show()
Es fundamental verificar la correcta creación de los DataFrames usando el método show
para obtener una vista tabular de los datos.
¿Cómo aplicar transformaciones básicas?
Una vez que tienes tus DataFrames, se pueden realizar diversas transformaciones. Algunas transformaciones básicas incluyen seleccionar columnas específicas y aplicar filtros.
Selección de columnas
La función select
permite seleccionar campos específicos, similar a SQL:
# Seleccionar columnas ID y Nombre
df_empleados.select("ID", "Nombre").show()
Aplicación de filtros
Existen múltiples formas de filtrar datos. Por ejemplo:
# Filtrar donde ID es igual a 1
df_empleados.filter(df_empleados.ID == 1).show()
# Alternativa usando la función `col`
from pyspark.sql.functions import col
df_empleados.filter(col("ID") == 1).show()
Ambos métodos logran el mismo resultado, mostrando la flexibilidad de PySpark.
¿Cuáles son las funciones avanzadas en Spark SQL?
Las funciones avanzadas como drop
, withColumn
, y las funciones de agregación son esenciales para trabajos más complejos.
Eliminar columnas
La función drop
se usa para eliminar columnas de un DataFrame:
# Eliminar columna ID
df_sin_id = df_empleados.drop("ID")
df_sin_id.show()
Crear columnas derivadas
La función withColumn
permite derivar nuevas columnas a partir de otras:
# Crear una nueva columna llamada Bonus
df_con_bonus = df_empleados.withColumn("Bonus", df_empleados.Salario * 0.10)
df_con_bonus.show()
Funciones de agregación
La agregación de datos se logra usando la función agg
con diversas funciones de agregación disponibles:
from pyspark.sql import functions as f
# Calcular agregados por Departamento
df_aggregado = df_empleados.groupBy("Departamento").agg(
f.count("Salario").alias("Conteo"),
f.sum("Salario").alias("Total Salario"),
f.max("Salario").alias("Salario Max"),
f.min("Salario").alias("Salario Min"),
f.avg("Salario").alias("Promedio Salario")
)
df_aggregado.show()
¿Cómo realizar uniones (joins) entre DataFrames?
Los joins combinan datos de dos DataFrames basados en una condición común. Existen varios tipos de joins: inner join
, left outer join
, right outer join
, y full outer join
.
Inner join
Un inner join
muestra solo las filas que tienen coincidencias en ambos DataFrames.
# Inner join entre empleados y departamentos
df_inner_join = df_empleados.join(df_departamentos, df_empleados.Departamento == df_departamentos.ID)
df_inner_join.show()
Left outer join
Un left join
incluye todos los registros del DataFrame de la izquierda y las coincidencias del de la derecha.
# Left join
df_left_join = df_empleados.join(df_departamentos, df_empleados.Departamento == df_departamentos.ID, "left")
df_left_join.show()
Estos ejemplos muestran cómo manejar diferentes tipos de joins, asegurando que puedas integrar datos de diversas fuentes eficientemente.
Al dominar el uso de estas funcionalidades en Spark SQL, puedes manejar grandes volúmenes de datos estructurados con la eficacia y flexibilidad que solo Apache Spark ofrece. Explora estas herramientas en tu entorno de Databricks y sigue desarrollando tus habilidades en el procesamiento de datos.