Skip to content

PySpark: Converter DataFrame ou Coluna em Lista Python (Guia para Iniciantes)

Updated on

Trabalhar com PySpark muitas vezes envolve converter DataFrames distribuídos do Spark em objetos nativos do Python.
Uma necessidade comum — especialmente durante depuração, exportação ou transformação de dados — é converter um DataFrame do PySpark em uma lista Python.

Embora o PySpark não forneça um método .tolist() embutido como o Pandas, existem várias formas confiáveis de obter o mesmo resultado, dependendo do tamanho do conjunto de dados e das restrições de memória.
Este guia atualizado cobre:

  • O que “tolist” significa em PySpark
  • Melhores técnicas para converter Spark DataFrames → listas Python
  • Como lidar com colunas únicas e múltiplas colunas
  • Considerações de desempenho
  • Exemplos de código para conjuntos de dados pequenos e grandes

Quer um agente de IA que realmente entenda seus fluxos de trabalho com PySpark, Pandas e Jupyter?

RunCell é um agente de IA para JupyterLab que consegue ler seu código, analisar DataFrames, entender o contexto do notebook, depurar erros e até gerar e executar código para você.
Ele funciona diretamente dentro do JupyterLab — sem trocar de janela ou fazer copy-paste.

👉 Experimente o RunCell: https://www.runcell.dev (opens in a new tab)


O que significa "tolist()" em PySpark?

Diferente do Pandas, DataFrames do PySpark não têm um método nativo .tolist().

Quando usuários de PySpark falam em “tolist”, normalmente querem dizer:

✔ Opção A — Converter o DataFrame inteiro em uma lista Python

df.collect()

✔ Opção B — Converter um DataFrame para Pandas, depois para lista

df.toPandas().values.tolist()

✔ Opção C — Converter uma única coluna em uma lista Python

df.select("col").rdd.flatMap(lambda x: x).collect()

Este guia passa por todos esses métodos com exemplos claros.


Método 1: Converter um DataFrame PySpark em Lista Python (Dados Pequenos)

Esse é o padrão mais comum, mas deve ser usado apenas quando o conjunto de dados cabe na memória.

df.toPandas().values.tolist()

Exemplo

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()

Saída

[['Alice', 1], ['Bob', 2], ['Charlie', 3], ['David', 4]]

Método 2: Converter Spark DataFrame em Lista sem Pandas (Recomendado para Dados Grandes)

Se o seu conjunto de dados é grande, evite sempre toPandas().
Use a API distribuída do Spark em vez disso:

df.collect()

Isso retorna:

[Row(Name='Alice', Age=1), Row(Name='Bob', Age=2), ...]

Para converter linhas em listas Python simples:

[x.asDict().values() for x in df.collect()]

Ou converter cada linha em um dicionário:

[row.asDict() for row in df.collect()]

Método 3: Converter uma Única Coluna em Lista Python

Um caso de uso muito comum.

Opção A: Usando RDD (rápido & escalável)

df.select("Name").rdd.flatMap(lambda x: x).collect()

Opção B: Usando Pandas (dados pequenos)

df.toPandas()["Name"].tolist()

Método 4: Converter um DataFrame com Índice em Lista Python

DataFrames do PySpark não têm um índice embutido, mas você pode adicionar um 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()

Converter para lista de dicionários:

df_index.toPandas().to_dict("records")

Saída

[
 {'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 Desempenho (Leitura Obrigatória)

🚫 Evite df.toPandas() quando:

  • O conjunto de dados é grande
  • A memória do cluster é limitada
  • As colunas contêm objetos binários/texto muito grandes

✔ Use collect() ou operações com RDD quando:

  • Trabalhar com dados médios ou grandes
  • Você precisa apenas de colunas específicas
  • Você quer evitar sobrecarregar a memória do driver

✔ Converta apenas o que for necessário

Em vez de fazer:

df.toPandas()

Prefira:

df.select("col_of_interest")

Conclusão

PySpark não inclui uma função nativa .tolist(), mas converter um DataFrame em uma lista Python é bem direto usando:

  • toPandas().values.tolist() — para conjuntos de dados pequenos
  • collect() ou operações com rdd — para cargas de trabalho escaláveis
  • to_dict("records") — para saída compatível com JSON

Escolha o método que se encaixa no tamanho dos seus dados e no seu fluxo de trabalho.


Referências


Perguntas Frequentes

1. Como converter um DataFrame PySpark em uma lista Python?

Use df.collect() ou df.toPandas().values.tolist(), dependendo do tamanho dos dados.

2. Como converter uma única coluna em lista?

df.select("col").rdd.flatMap(lambda x: x).collect()

3. Como converter uma linha do Spark em dict?

row.asDict()

Guias Relacionados de PySpark