Introducción

En este tema, aprenderemos a realizar operaciones con DataFrames en Apache Spark. Los DataFrames son una abstracción de datos distribuidos que proporcionan una API de alto nivel para trabajar con datos estructurados y semiestructurados. Los DataFrames son similares a las tablas en una base de datos relacional y permiten realizar operaciones como selección, filtrado, agregación y unión de datos.

Contenido

  1. Creación de DataFrames
  2. Selección y Filtrado de Datos
  3. Agregaciones y Agrupaciones
  4. Uniones y Combinaciones
  5. Transformaciones y Acciones
  6. Ejercicios Prácticos

  1. Creación de DataFrames

Desde un archivo CSV

from pyspark.sql import SparkSession

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

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

Desde una lista de Python

data = [("Alice", 34), ("Bob", 45), ("Cathy", 29)]
columns = ["Name", "Age"]

df = spark.createDataFrame(data, columns)
df.show()

  1. Selección y Filtrado de Datos

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 donde la edad es mayor que 30
df.filter(df.Age > 30).show()

# Filtrar filas usando SQL
df.createOrReplaceTempView("people")
spark.sql("SELECT * FROM people WHERE Age > 30").show()

  1. Agregaciones y Agrupaciones

Agregaciones Simples

# Calcular la edad promedio
df.agg({"Age": "avg"}).show()

# Calcular la edad máxima
df.agg({"Age": "max"}).show()

Agrupaciones

# Agrupar por nombre y contar
df.groupBy("Name").count().show()

# Agrupar por nombre y calcular la edad promedio
df.groupBy("Name").agg({"Age": "avg"}).show()

  1. Uniones y Combinaciones

Uniones

data1 = [("Alice", 34), ("Bob", 45)]
data2 = [("Alice", "F"), ("Bob", "M")]

df1 = spark.createDataFrame(data1, ["Name", "Age"])
df2 = spark.createDataFrame(data2, ["Name", "Gender"])

# Realizar una unión
df1.join(df2, "Name").show()

Combinaciones

# Realizar una combinación de DataFrames
df1.union(df2).show()

  1. Transformaciones y Acciones

Transformaciones

Las transformaciones son operaciones que devuelven un nuevo DataFrame y son perezosas, es decir, no se ejecutan hasta que se llama a una acción.

# Añadir una nueva columna
df.withColumn("AgeAfter10Years", df.Age + 10).show()

# Renombrar una columna
df.withColumnRenamed("Age", "Years").show()

Acciones

Las acciones son operaciones que devuelven un valor al controlador o escriben datos a un sistema de almacenamiento.

# Mostrar el contenido del DataFrame
df.show()

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

  1. Ejercicios Prácticos

Ejercicio 1: Creación y Selección

Instrucciones:

  1. Crea un DataFrame a partir de una lista de tuplas.
  2. Selecciona y muestra solo las columnas "Name" y "Age".

Código:

data = [("Alice", 34), ("Bob", 45), ("Cathy", 29)]
columns = ["Name", "Age"]

df = spark.createDataFrame(data, columns)
df.select("Name", "Age").show()

Ejercicio 2: Filtrado y Agregación

Instrucciones:

  1. Filtra las filas donde la edad es mayor que 30.
  2. Calcula la edad promedio de las filas filtradas.

Código:

filtered_df = df.filter(df.Age > 30)
filtered_df.agg({"Age": "avg"}).show()

Ejercicio 3: Unión de DataFrames

Instrucciones:

  1. Crea dos DataFrames.
  2. Realiza una unión de los DataFrames en la columna "Name".

Código:

data1 = [("Alice", 34), ("Bob", 45)]
data2 = [("Alice", "F"), ("Bob", "M")]

df1 = spark.createDataFrame(data1, ["Name", "Age"])
df2 = spark.createDataFrame(data2, ["Name", "Gender"])

df1.join(df2, "Name").show()

Conclusión

En esta sección, hemos aprendido a realizar diversas operaciones con DataFrames en Apache Spark, incluyendo la creación, selección, filtrado, agregación, y unión de datos. Estas operaciones son fundamentales para el procesamiento y análisis de grandes volúmenes de datos. En el próximo módulo, profundizaremos en el manejo de datos faltantes y otras operaciones avanzadas con DataFrames.

© Copyright 2024. Todos los derechos reservados