Pular para o conteúdo principal

Classe DataFrame

Uma coleção distribuída de dados agrupados em colunas nomeadas.

Um DataFrame é equivalente a uma tabela relacional no Spark SQL e pode ser criado usando várias funções no SparkSession.

importante

Um DataFrame não deve ser criado diretamente usando o construtor.

Compatível com Spark Connect

Propriedades

Propriedade

Descrição

sparkSession

Retorna a SparkSession que criou este DataFrame.

rdd

Retorna o conteúdo como um RDD de linhas (somente no modo Clássico).

na

Retorna um DataFrameNaFunctions para lidar com valores ausentes.

stat

Retorna um DataFrameStatFunctions para funções estatísticas.

write

Interface para salvar o conteúdo do DataFrame não transmissível em armazenamento externo.

writeStream

Interface para salvar o conteúdo do DataFrame de transmissão em armazenamento externo.

schema

Retorna o esquema deste DataFrame como um StructType.

dtypes

Retorna todos os nomes de colunas e seus respectivos tipos de dados em uma lista.

columns

Recupera os nomes de todas as colunas do DataFrame como uma lista.

storageLevel

Obtenha o nível de armazenamento atual do DataFrame.

isStreaming

Retorna True se este DataFrame contém uma ou mais fontes que retornam dados continuamente à medida que chegam.

executionInfo

Retorna um objeto ExecutionInfo após a execução da consulta.

plot

Retorna um PySparkPlotAccessor para funções gráficas.

Métodos

Visualização e inspeção de dados

Método

Descrição

toJSON(use_unicode)

Converte um DataFrame em um RDD de strings ou DataFrame.

printSchema(level)

Imprime o esquema em formato de árvore.

explain(extended, mode)

Imprime os planos (lógicos e físicos) no console para fins de depuração.

show(n, truncate, vertical)

Imprime as primeiras n linhas do DataFrame no console.

collect()

Retorna todos os registros no DataFrame como uma lista de linhas (Row).

toLocalIterator(prefetchPartitions)

Retorna um iterador que contém todas as linhas deste DataFrame.

take(num)

Retorna as primeiras num linhas como uma lista de Row.

tail(num)

Retorna as últimas num linhas como uma lista de Row.

head(n)

Retorna as primeiras n linhas.

first()

Retorna a primeira linha como uma linha (Row).

count()

Retorna o número de linhas neste DataFrame.

isEmpty()

Verifica se o DataFrame está vazio e retorna um valor booleano.

describe(*cols)

Calcula estatísticas básicas para colunas numéricas e de texto.

summary(*statistics)

Calcular estatísticas específicas para colunas numéricas e de texto.

Vista temporária

Método

Descrição

createTempView(name)

Cria uma view temporária local com este DataFrame.

createOrReplaceTempView(name)

Cria ou substitui uma view temporária local com este DataFrame.

createGlobalTempView(name)

Cria uma view temporária global com este DataFrame.

createOrReplaceGlobalTempView(name)

Cria ou substitui uma view temporária global usando o nome fornecido.

Seleção e projeção

Método

Descrição

select(*cols)

Projeta um conjunto de expressões e retorna um novo DataFrame.

selectExpr(*expr)

Projeta um conjunto de expressões SQL e retorna um novo DataFrame.

filter(condition)

Filtra as linhas usando a condição fornecida.

where(condition)

Apelido para filtro.

drop(*cols)

Retorna um novo DataFrame sem as colunas especificadas.

toDF(*cols)

Retorna um novo DataFrame com os novos nomes de coluna especificados.

withColumn(colName, col)

Retorna um novo DataFrame adicionando uma coluna ou substituindo a coluna existente que possui o mesmo nome.

withColumns(*colsMap)

Retorna um novo DataFrame adicionando várias colunas ou substituindo as colunas existentes que possuem os mesmos nomes.

withColumnRenamed(existing, new)

Retorna um novo DataFrame renomeando uma coluna existente.

withColumnsRenamed(colsMap)

Retorna um novo DataFrame renomeando várias colunas.

withMetadata(columnName, metadata)

Retorna um novo DataFrame atualizando uma coluna existente com metadados.

metadataColumn(colName)

Seleciona uma coluna de metadados com base em seu nome lógico e a retorna como uma coluna.

colRegex(colName)

Seleciona a coluna com base no nome da coluna especificado como uma expressão regular e a retorna como uma coluna.

Classificação e ordenação

Método

Descrição

sort(*cols, **kwargs)

Retorna um novo DataFrame ordenado pelas colunas especificadas.

orderBy(*cols, **kwargs)

Sinônimo para ordenar.

sortWithinPartitions(*cols, **kwargs)

Retorna um novo DataFrame com cada partição ordenada pela(s) coluna(s) especificada(s).

Agregação e agrupamento

Método

Descrição

groupBy(*cols)

Agrupa o DataFrame pelas colunas especificadas para que a agregação possa ser realizada nelas.

rollup(*cols)

Crie um rollup multidimensional para o DataFrame atual usando as colunas especificadas.

cube(*cols)

Crie um cubo multidimensional para o DataFrame atual usando as colunas especificadas.

groupingSets(groupingSets, *cols)

Crie uma agregação multidimensional para o DataFrame atual usando os conjuntos de agrupamento especificados.

agg(*exprs)

Agregar todos os dados do DataFrame sem agrupamento (abreviação de df.groupBy().agg()).

observe(observation, *exprs)

Defina métricas (nomeadas) para observar no DataFrame.

juntar

Método

Descrição

join(other, on, how)

Junte-se a outro DataFrame, usando a expressão join fornecida.

crossJoin(other)

Retorna o produto cartesiano com outro DataFrame.

lateralJoin(other, on, how)

Junção lateral com outro DataFrame, usando a expressão join fornecida.

Definir operações

Método

Descrição

union(other)

Retorna um novo DataFrame contendo a união das linhas deste DataFrame com as de outro DataFrame.

unionByName(other, allowMissingColumns)

Retorna um novo DataFrame contendo a união das linhas deste DataFrame com as de outro DataFrame.

intersect(other)

Retorna um novo DataFrame contendo apenas as linhas presentes neste DataFrame e em outro DataFrame.

intersectAll(other)

Retorna um novo DataFrame contendo linhas tanto deste DataFrame quanto de outro DataFrame, preservando as duplicatas.

subtract(other)

Retorna um novo DataFrame contendo as linhas presentes neste DataFrame, mas não em outro DataFrame.

exceptAll(other)

Retorna um novo DataFrame contendo as linhas presentes neste DataFrame, mas não em outro DataFrame, preservando as duplicatas.

Desduplicação

Método

Descrição

distinct()

Retorna um novo DataFrame contendo as linhas distintas deste DataFrame.

dropDuplicates(subset)

Retorna um novo DataFrame com as linhas duplicadas removidas, opcionalmente considerando apenas determinadas colunas.

dropDuplicatesWithinWatermark(subset)

Retorna um novo DataFrame com as linhas duplicadas removidas, opcionalmente considerando apenas determinadas colunas, dentro da marca d'água.

Amostragem e divisão

Método

Descrição

sample(withReplacement, fraction, seed)

Retorna um subconjunto amostrado deste DataFrame.

sampleBy(col, fractions, seed)

Retorna uma amostra estratificada sem reposição com base na fração fornecida em cada estrato.

randomSplit(weights, seed)

Divide aleatoriamente este DataFrame com os pesos fornecidos.

Particionamento

Método

Descrição

coalesce(numPartitions)

Retorna um novo DataFrame que possui exatamente numPartitions partições.

repartition(numPartitions, *cols)

Retorna um novo DataFrame particionado pelas expressões de particionamento fornecidas.

repartitionByRange(numPartitions, *cols)

Retorna um novo DataFrame particionado pelas expressões de particionamento fornecidas.

repartitionById(numPartitions, partitionIdCol)

Retorna um novo DataFrame particionado pela expressão de ID de partição fornecida.

Remodelando

Método

Descrição

unpivot(ids, values, variableColumnName, valueColumnName)

Despivotar um DataFrame do formato amplo para o formato longo.

melt(ids, values, variableColumnName, valueColumnName)

Sinônimo para despivotar.

transpose(indexColumn)

Transpõe um DataFrame de forma que os valores na coluna de índice especificada se tornem as novas colunas.

Tratamento de dados faltantes

Método

Descrição

dropna(how, thresh, subset)

Retorna um novo DataFrame omitindo linhas com valores nulos ou NaN.

fillna(value, subset)

Retorna um novo DataFrame no qual os valores nulos são preenchidos com o novo valor.

replace(to_replace, value, subset)

Retorna um novo DataFrame substituindo um valor por outro.

Funções estatísticas

Método

Descrição

approxQuantile(col, probabilities, relativeError)

Calcula os quantis aproximados das colunas numéricas de um DataFrame.

corr(col1, col2, method)

Calcula a correlação entre duas colunas de um DataFrame como um valor do tipo double.

cov(col1, col2)

Calcule a covariância da amostra para as colunas fornecidas, especificadas por seus nomes.

crosstab(col1, col2)

Calcule uma tabela de frequência par a par das colunas fornecidas.

freqItems(cols, support)

Identificação de itens frequentes em colunas, possivelmente com falsos positivos.

Operações de esquema

Método

Descrição

to(schema)

Retorna um novo DataFrame onde cada linha é reconciliada para corresponder ao esquema especificado.

alias(alias)

Retorna um novo DataFrame com um alias definido.

Iteração

Método

Descrição

foreach(f)

Aplica a função f a todas as linhas deste DataFrame.

foreachPartition(f)

Aplica a função f a cada partição deste DataFrame.

Armazenamento em cache e persistência

Método

Descrição

cache()

Mantém o DataFrame com o nível de armazenamento default (MEMORY_AND_DISK_DESER).

persist(storageLevel)

Define o nível de armazenamento para persistir o conteúdo do DataFrame entre as operações.

unpersist(blocking)

Marca o DataFrame como não persistente e remove todos os seus blocos da memória e do disco.

Pontos de controle

Método

Descrição

checkpoint(eager)

Retorna uma versão com ponto de verificação (checkpoint) deste DataFrame.

localCheckpoint(eager, storageLevel)

Retorna uma versão localmente salva deste DataFrame.

mil operações

Método

Descrição

withWatermark(eventTime, delayThreshold)

Define uma marca d'água de tempo do evento para este DataFrame.

Dicas de otimização

Método

Descrição

hint(name, *parameters)

Especifica alguma dica sobre o DataFrame atual.

Limites e compensações

Método

Descrição

limit(num)

Limita a contagem de resultados ao número especificado.

offset(num)

Retorna um novo DataFrame, ignorando as primeiras n linhas.

transformações avançadas

Método

Descrição

transform(func, *args, **kwargs)

Retorna um novo DataFrame. Sintaxe concisa para encadear transformações personalizadas.

Métodos de conversão

Método

Descrição

toPandas()

Retorna o conteúdo deste DataFrame como um objeto Pandas pandas.DataFrame.

toArrow()

Retorna o conteúdo deste DataFrame como um objeto PyArrow do tipo pyarrow.Table.

pandas_api(index_col)

Converte o DataFrame existente em um DataFrame do pandas-on-Spark.

mapInPandas(func, schema, barrier, profile)

Mapeia um iterador de lotes no DataFrame atual usando uma função nativa do Python.

mapInArrow(func, schema, barrier, profile)

Mapeia um iterador de lotes no DataFrame atual usando uma função nativa do Python que é executada em pyarrow.RecordBatch.

Escrita de dados

Método

Descrição

writeTo(table)

Criar um construtor de configuração de gravação para fontes v2.

mergeInto(table, condition)

Mesclar um conjunto de atualizações, inserções e exclusões de uma tabela de origem em uma tabela de destino.

ComparaçãoDataFrame

Método

Descrição

sameSemantics(other)

Retorna True quando os planos de consulta lógica dentro de ambos os DataFrames são iguais.

semanticHash()

Retorna um código hash do plano de consulta lógica para este DataFrame.

Metadados e informações de arquivo

Método

Descrição

inputFiles()

Retorna um instantâneo (Snapshot) dos arquivos que compõem este DataFrame, da melhor forma possível.

Recurso SQL avançado

Método

Descrição

isLocal()

Retorna True se os métodos collect e take puderem ser executados localmente.

asTable()

Converte o DataFrame em um objeto TableArg, que pode ser usado como argumento de tabela em uma TVF.

scalar()

Retorna um objeto Column para uma subconsulta SCALAR contendo exatamente uma linha e uma coluna.

exists()

Retorna um objeto Column para uma subconsulta EXISTS.

Exemplos

Operações básicas DataFrame

Python
# Create a DataFrame
people = spark.createDataFrame([
{"deptId": 1, "age": 40, "name": "Hyukjin Kwon", "gender": "M", "salary": 50},
{"deptId": 1, "age": 50, "name": "Takuya Ueshin", "gender": "M", "salary": 100},
{"deptId": 2, "age": 60, "name": "Xinrong Meng", "gender": "F", "salary": 150},
{"deptId": 3, "age": 20, "name": "Haejoon Lee", "gender": "M", "salary": 200}
])

# Select columns
people.select("name", "age").show()

# Filter rows
people.filter(people.age > 30).show()

# Add a new column
people.withColumn("age_plus_10", people.age + 10).show()

Agregação e agrupamento

Python
# Group by and aggregate
people.groupBy("gender").agg({"salary": "avg", "age": "max"}).show()

# Multiple aggregations
from pyspark.sql import functions as F
people.groupBy("deptId").agg(
F.avg("salary").alias("avg_salary"),
F.max("age").alias("max_age")
).show()

juntar

Python
# Create another DataFrame
department = spark.createDataFrame([
{"id": 1, "name": "PySpark"},
{"id": 2, "name": "ML"},
{"id": 3, "name": "Spark SQL"}
])

# Join DataFrames
people.join(department, people.deptId == department.id).show()

Transformações complexas

Python
# Chained operations
result = people.filter(people.age > 30) \\
.join(department, people.deptId == department.id) \\
.groupBy(department.name, "gender") \\
.agg({"salary": "avg", "age": "max"}) \\
.sort("max(age)")
result.show()