PySpark: Convertir un DataFrame o Columna a Lista de Python (Guía para Principiantes)
Updated on
Trabajar con PySpark a menudo implica convertir DataFrames distribuidos de Spark en objetos nativos de Python.
Una necesidad muy común—especialmente durante la depuración, exportación o transformación de datos—es convertir un DataFrame de PySpark en una lista de Python.
Aunque PySpark no proporciona un método integrado .tolist() como Pandas, existen varias formas fiables de conseguir el mismo resultado según el tamaño del conjunto de datos y las restricciones de memoria.
Esta guía actualizada cubre:
- Qué significa “tolist” en PySpark
- Mejores técnicas para convertir Spark DataFrames → listas de Python
- Cómo manejar columnas simples y múltiples
- Consideraciones de rendimiento
- Ejemplos de código para conjuntos de datos pequeños y grandes
¿Quieres un agente de IA que realmente entienda tus flujos de trabajo con PySpark, Pandas y Jupyter?
RunCell es un agente de IA para JupyterLab que puede leer tu código, analizar DataFrames, comprender el contexto del notebook, depurar errores e incluso generar y ejecutar código por ti.
Funciona directamente dentro de JupyterLab, sin cambiar de ventana ni copiar y pegar.
👉 Prueba RunCell: https://www.runcell.dev (opens in a new tab)
¿Qué significa "tolist()" en PySpark?
A diferencia de Pandas, los DataFrames de PySpark no tienen un método nativo .tolist().
Cuando los usuarios de PySpark hablan de “tolist”, normalmente se refieren a:
✔ Opción A — Convertir todo el DataFrame en una lista de Python
df.collect()✔ Opción B — Convertir un DataFrame a Pandas y luego a lista
df.toPandas().values.tolist()✔ Opción C — Convertir una sola columna a una lista de Python
df.select("col").rdd.flatMap(lambda x: x).collect()Esta guía recorre todos estos métodos con ejemplos claros.
Método 1: Convertir un DataFrame de PySpark en una Lista de Python (Datos Pequeños)
Este es el patrón más común, pero debe usarse solo cuando el conjunto de datos cabe en memoria.
df.toPandas().values.tolist()Ejemplo
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("PySparkTutorial").getOrCreate()
data = [('Alice', 1), ('Bob', 2), ('Charlie', 3), ('David', 4)]
df = spark.createDataFrame(data, ['Name', 'Age'])
df.toPandas().values.tolist()Salida
[['Alice', 1], ['Bob', 2], ['Charlie', 3], ['David', 4]]Método 2: Convertir un DataFrame de Spark a Lista sin Pandas (Recomendado para Datos Grandes)
Si tu conjunto de datos es grande, evita siempre toPandas().
En su lugar, utiliza la API distribuida de Spark:
df.collect()Esto devuelve:
[Row(Name='Alice', Age=1), Row(Name='Bob', Age=2), ...]Para convertir las filas en listas simples de Python:
[x.asDict().values() for x in df.collect()]O convertir cada fila en un diccionario:
[row.asDict() for row in df.collect()]Método 3: Convertir una Sola Columna en Lista de Python
Un caso de uso muy común.
Opción A: Usando RDD (rápido y escalable)
df.select("Name").rdd.flatMap(lambda x: x).collect()Opción B: Usando Pandas (datos pequeños)
df.toPandas()["Name"].tolist()Método 4: Convertir un DataFrame con Índice en una Lista de Python
Los DataFrames de PySpark no tienen un índice integrado, pero puedes añadir uno manualmente:
from pyspark.sql.functions import row_number
from pyspark.sql.window import Window
df_index = df.withColumn(
"index", row_number().over(Window.orderBy("Name"))
)
df_index.show()Convertir a lista de diccionarios:
df_index.toPandas().to_dict("records")Salida
[
{'Name': 'Alice', 'Age': 1, 'index': 1},
{'Name': 'Bob', 'Age': 2, 'index': 2},
{'Name': 'Charlie', 'Age': 3, 'index': 3},
{'Name': 'David', 'Age': 4, 'index': 4}
]Notas de Rendimiento (Lectura Obligatoria)
🚫 Evita df.toPandas() cuando:
- El conjunto de datos es grande
- La memoria del clúster es limitada
- Las columnas contienen objetos binarios/texto muy grandes
✔ Usa collect() u operaciones RDD cuando:
- Trabajas con datos medianos o grandes
- Solo necesitas columnas específicas
- Quieres evitar sobrecargar la memoria del driver
✔ Convierte solo lo que necesitas
En lugar de hacer:
df.toPandas()Es mejor:
df.select("col_of_interest")Conclusión
PySpark no incluye una función nativa .tolist(), pero convertir un DataFrame en una lista de Python es muy directo utilizando:
toPandas().values.tolist()— para conjuntos de datos pequeñoscollect()u operacionesrdd— para cargas de trabajo escalablesto_dict("records")— para una salida compatible con JSON
Elige el método que mejor se adapte al tamaño de tus datos y a tu flujo de trabajo.
Referencias
- https://sparkbyexamples.com/pyspark/pyspark-tolist-function/ (opens in a new tab)
- https://www.mygreatlearning.com/blog/pyspark-how-to-convert-a-dataframe-tolist/ (opens in a new tab)
- https://sparkbyexamples.com/pyspark/pyspark-dataframe-to-pandas-dataframe/ (opens in a new tab)
Preguntas Frecuentes
1. ¿Cómo convierto un DataFrame de PySpark en una lista de Python?
Usa df.collect() o df.toPandas().values.tolist() según el tamaño de los datos.
2. ¿Cómo convierto una sola columna en una lista?
df.select("col").rdd.flatMap(lambda x: x).collect()3. ¿Cómo convierto una fila de Spark en un dict?
row.asDict()