Introducción a los DataFrames

Los DataFrames son una abstracción de datos en Apache Spark que permite trabajar con datos estructurados de manera eficiente. Son similares a las tablas en una base de datos relacional o a los DataFrames en pandas de Python. Los DataFrames en Spark proporcionan una API de alto nivel para trabajar con datos distribuidos y permiten realizar operaciones complejas de manera sencilla y eficiente.

Características Clave de los DataFrames

  • Distribuidos: Los DataFrames están distribuidos a través de un clúster, lo que permite manejar grandes volúmenes de datos.
  • Inmutables: Una vez creados, los DataFrames no pueden ser modificados. Cualquier operación sobre un DataFrame genera un nuevo DataFrame.
  • Optimización Automática: Spark optimiza automáticamente las consultas sobre DataFrames utilizando el motor de optimización Catalyst.
  • Interoperabilidad: Los DataFrames pueden ser creados a partir de diversas fuentes de datos como archivos CSV, JSON, Parquet, bases de datos SQL, entre otros.

Creación de DataFrames

Desde un RDD

from pyspark.sql import SparkSession

# Crear una sesión de Spark
spark = SparkSession.builder.appName("DataFrameExample").getOrCreate()

# Crear un RDD
rdd = spark.sparkContext.parallelize([(1, "Alice", 29), (2, "Bob", 31), (3, "Cathy", 25)])

# Definir el esquema
from pyspark.sql.types import StructType, StructField, IntegerType, StringType

schema = StructType([
    StructField("id", IntegerType(), True),
    StructField("name", StringType(), True),
    StructField("age", IntegerType(), True)
])

# Crear un DataFrame a partir del RDD y el esquema
df = spark.createDataFrame(rdd, schema)

# Mostrar el DataFrame
df.show()

Desde un archivo CSV

# Leer un archivo CSV en un DataFrame
df_csv = spark.read.csv("path/to/file.csv", header=True, inferSchema=True)

# Mostrar el DataFrame
df_csv.show()

Desde un archivo JSON

# Leer un archivo JSON en un DataFrame
df_json = spark.read.json("path/to/file.json")

# Mostrar el DataFrame
df_json.show()

Operaciones Básicas con DataFrames

Selección de Columnas

# Seleccionar una columna
df.select("name").show()

# Seleccionar múltiples columnas
df.select("name", "age").show()

Filtrado de Filas

# Filtrar filas basadas en una condición
df.filter(df.age > 30).show()

Agregaciones

# Calcular la edad promedio
df.groupBy().avg("age").show()

# Contar el número de filas
df.count()

Ordenamiento

# Ordenar por una columna
df.orderBy("age").show()

# Ordenar por múltiples columnas
df.orderBy(df.age.desc(), df.name.asc()).show()

Ejercicio Práctico

Ejercicio 1: Creación y Manipulación de DataFrames

  1. Crear un DataFrame: Crea un DataFrame a partir de un archivo CSV que contenga información de empleados (id, nombre, edad, departamento).
  2. Seleccionar Columnas: Selecciona las columnas "nombre" y "departamento".
  3. Filtrar Filas: Filtra los empleados que tienen más de 30 años.
  4. Agregación: Calcula la edad promedio de los empleados.
  5. Ordenamiento: Ordena los empleados por edad de manera descendente.

Solución

# Crear una sesión de Spark
spark = SparkSession.builder.appName("EmployeeDataFrame").getOrCreate()

# Leer el archivo CSV en un DataFrame
df_employees = spark.read.csv("path/to/employees.csv", header=True, inferSchema=True)

# Seleccionar las columnas "nombre" y "departamento"
df_selected = df_employees.select("nombre", "departamento")

# Filtrar los empleados que tienen más de 30 años
df_filtered = df_employees.filter(df_employees.edad > 30)

# Calcular la edad promedio de los empleados
df_avg_age = df_employees.groupBy().avg("edad")

# Ordenar los empleados por edad de manera descendente
df_sorted = df_employees.orderBy(df_employees.edad.desc())

# Mostrar los resultados
df_selected.show()
df_filtered.show()
df_avg_age.show()
df_sorted.show()

Conclusión

En esta sección, hemos aprendido sobre los DataFrames en Apache Spark, cómo crearlos a partir de diferentes fuentes de datos y cómo realizar operaciones básicas como selección, filtrado, agregación y ordenamiento. Los DataFrames son una herramienta poderosa para trabajar con datos estructurados en Spark, y su uso eficiente puede mejorar significativamente el rendimiento y la simplicidad de las tareas de procesamiento de datos.

En el próximo tema, exploraremos Spark SQL, que nos permitirá realizar consultas SQL sobre DataFrames y aprovechar la optimización automática de Spark para consultas complejas.

© Copyright 2024. Todos los derechos reservados