Saltar a contenido

DataFrames en PySpark

Banner del Curso

Introducción

Los DataFrames son una de las estructuras fundamentales para trabajar con datos en PySpark. Inspirados en los DataFrames de Pandas y R, ofrecen una forma eficiente y expresiva de manipular grandes volúmenes de datos distribuidos.

En este capítulo, aprenderás cómo crear, explorar y transformar DataFrames usando PySpark.


¿Qué es un DataFrame en PySpark?

Un DataFrame en PySpark es una colección distribuida de datos organizados en columnas, con un esquema explícito (nombres y tipos de datos). Internamente, está optimizado para ejecución distribuida en clústeres, soporta ejecución diferida (lazy evaluation) y se integra con SQL.


Crear un DataFrame a partir de un archivo CSV

La forma más común de iniciar un análisis es cargar un archivo desde disco:

df = spark.read.csv("data/ventas.csv", header=True, inferSchema=True)

Parámetros comunes:

  • header=True: toma la primera fila como nombres de columnas.
  • inferSchema=True: detecta automáticamente los tipos de datos.

Crear un DataFrame manualmente

También puedes crear un DataFrame desde una lista de tuplas y una lista de nombres de columnas:

datos = [("Ana", 25), ("Luis", 30), ("Pedro", 28)]
columnas = ["nombre", "edad"]

df = spark.createDataFrame(datos, columnas)
df.show()

Explorar el contenido del DataFrame

Algunas funciones útiles para inspeccionar tus datos:

df.show(5)         # Muestra las primeras 5 filas
df.printSchema()   # Muestra el esquema (nombres y tipos de columnas)
df.columns         # Lista de nombres de columnas
df.describe().show()  # Estadísticas descriptivas

Seleccionar columnas y filtrar filas

# Seleccionar una o varias columnas
df.select("nombre").show()
df.select("nombre", "edad").show()

# Filtrar filas
df.filter(df["edad"] > 27).show()
df.where(df["nombre"] == "Ana").show()

Agregaciones y funciones de grupo

df.groupBy("edad").count().show()
df.agg({"edad": "avg"}).show()

Ordenar y renombrar columnas

df.orderBy("edad", ascending=False).show()
df = df.withColumnRenamed("edad", "edad_años")

Añadir columnas derivadas

Puedes crear nuevas columnas a partir de otras usando expresiones:

from pyspark.sql.functions import col

df = df.withColumn("edad_doble", col("edad") * 2)
df.show()

Eliminar columnas

df = df.drop("edad_doble")

Uniones entre DataFrames

df1 = spark.createDataFrame([("Ana", 1), ("Luis", 2)], ["nombre", "id"])
df2 = spark.createDataFrame([(1, "Chile"), (2, "Perú")], ["id", "pais"])

df_join = df1.join(df2, on="id", how="inner")
df_join.show()

Tipos de join disponibles: inner, left, right, outer.


Conversión a Pandas (solo si es pequeño)

df_pandas = df.toPandas()

Úsalo solo si el conjunto de datos es pequeño y cabe en memoria.


Referencias útiles


Conclusión

Los DataFrames en PySpark son una herramienta poderosa y expresiva para procesar datos distribuidos. Dominarlos es clave para trabajar de forma eficiente con grandes volúmenes de información. A diferencia de Pandas, los DataFrames de PySpark están diseñados para escalar horizontalmente, permitiendo análisis que superan las capacidades de una sola máquina.

En el siguiente capítulo aprenderás a aplicar transformaciones y acciones, que son los bloques fundamentales del procesamiento en Spark.