Partilhar via


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.

Suporta Spark Connect

Propriedades

Propriedade Descrição
sparkSession Devolve o SparkSession que criou este DataFrame.
rdd Devolve o conteúdo como RDD de Row (apenas modo Clássico).
na Devolve um DataFrameNaFunctions para lidar com valores em falta.
stat Devolve uma DataFrameStatFunctions para funções estatísticas.
write Interface para guardar o conteúdo do DataFrame não em streaming para armazenamento externo.
writeStream Interface para guardar o conteúdo do DataFrame em streaming para armazenamento externo.
schema Devolve o esquema deste DataFrame como um StructType.
dtypes Devolve todos os nomes das colunas e os seus tipos de dados como 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 Verdadeiro se este DataFrame contiver uma ou mais fontes que retornam continuamente dados à medida que chegam.
executionInfo Devolve um objeto ExecutionInfo após a execução da consulta.
plot Devolve um PySparkPlotAccessor para funções de plotamento.

Methods

Visualização e inspeção de dados

Método Descrição
toJSON(use_unicode) Converte um DataFrame num RDD de string ou DataFrame.
printSchema(level) Imprime o esquema no formato de árvore.
explain(extended, mode) Imprime os planos (lógicos e físicos) na consola para efeitos de depuração.
show(n, truncate, vertical) Imprime as primeiras n linhas do DataFrame na consola.
collect() Devolve todos os registos no DataFrame como uma lista de linhas.
toLocalIterator(prefetchPartitions) Devolve um iterador que contém todas as linhas deste DataFrame.
take(num) Devolve as primeiras linhas de números como uma lista de linhas.
tail(num) Devolve as últimas linhas de números como uma lista de linhas.
head(n) Devolve as primeiras n linhas.
first() Devolve a primeira linha como uma fila.
count() Devolve o número de linhas neste DataFrame.
isEmpty() Verifica se o DataFrame está vazio e devolve um valor booleano.
describe(*cols) Calcula estatísticas básicas para colunas numéricas e de cadeia.
summary(*statistics) Calcula estatísticas especificadas para colunas numéricas e de strings.

Vistas temporárias

Método Descrição
createTempView(name) Cria uma vista temporária local com este DataFrame.
createOrReplaceTempView(name) Cria ou substitui uma vista temporária local por este DataFrame.
createGlobalTempView(name) Cria uma vista global temporária com este DataFrame.
createOrReplaceGlobalTempView(name) Cria ou substitui uma vista global temporária usando o nome próprio.

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 dada.
where(condition) Pseudónimo de filtro.
drop(*cols) Devolve um novo DataFrame sem colunas especificadas.
toDF(*cols) Devolve um novo DataFrame com novos nomes de colunas especificados.
withColumn(colName, col) Devolve um novo DataFrame adicionando uma coluna ou substituindo a coluna existente com o mesmo nome.
withColumns(*colsMap) Devolve um novo DataFrame adicionando várias colunas ou substituindo as colunas existentes com os mesmos nomes.
withColumnRenamed(existing, new) Devolve um novo DataFrame ao renomear uma coluna existente.
withColumnsRenamed(colsMap) Devolve um novo DataFrame ao renomear várias colunas.
withMetadata(columnName, metadata) Devolve um novo DataFrame atualizando uma coluna existente com metadados.
metadataColumn(colName) Seleciona uma coluna de metadados com base no nome lógico da coluna e devolve-a como uma Coluna.
colRegex(colName) Seleciona a coluna com base no nome da coluna especificado como regex e devolve-a como Coluna.

Ordenação e ordenação

Método Descrição
sort(*cols, **kwargs) Devolve um novo DataFrame ordenado por(as) coluna(s) especificada(s).
orderBy(*cols, **kwargs) Um pseudónimo de espécie.
sortWithinPartitions(*cols, **kwargs) Devolve um novo DataFrame com cada partição ordenada pelo(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 sobre elas.
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 agregação multidimensional para o DataFrame atual usando os conjuntos de agrupamento especificados.
agg(*exprs) Agregar em todo o DataFrame sem grupos (abreviação de df.groupBy().agg()).
observe(observation, *exprs) Defina métricas (nomeadas) a observar no DataFrame.

Joins

Método Descrição
join(other, on, how) Junta-se a outro DataFrame, usando a expressão de junção dada.
crossJoin(other) Devolve o produto cartesiano com outro DataFrame.
lateralJoin(other, on, how) Junções laterais com outro DataFrame, usando a expressão de junção dada.

Definir operações

Método Descrição
union(other) Devolva um novo DataFrame contendo a união de linhas neste e noutro DataFrame.
unionByName(other, allowMissingColumns) Devolve um novo DataFrame contendo a união de linhas neste e noutro DataFrame.
intersect(other) Devolva um novo DataFrame contendo apenas linhas tanto neste DataFrame como noutro DataFrame.
intersectAll(other) Devolva um novo DataFrame contendo linhas tanto neste DataFrame como noutro DataFrame, preservando duplicados.
subtract(other) Devolva um novo DataFrame contendo linhas neste DataFrame mas não noutro DataFrame.
exceptAll(other) Devolva uma nova DataFrame contendo linhas nesse DataFrame mas não noutra DataFrame, preservando duplicados.

Deduplication

Método Descrição
distinct() Devolve um novo DataFrame contendo as linhas distintas deste DataFrame.
dropDuplicates(subset) Devolva um novo DataFrame com as linhas duplicadas removidas, considerando opcionalmente apenas certas colunas.
dropDuplicatesWithinWatermark(subset) Devolva um novo DataFrame com linhas duplicadas removidas, opcionalmente apenas considerando certas colunas, dentro da marca de água.

Amostragem e divisão

Método Descrição
sample(withReplacement, fraction, seed) Devolve um subconjunto amostrado deste DataFrame.
sampleBy(col, fractions, seed) Devolve uma amostra estratificada sem substituição com base na fração dada em cada estrato.
randomSplit(weights, seed) Divide aleatoriamente este DataFrame com os pesos fornecidos.

Partitioning

Método Descrição
coalesce(numPartitions) Devolve um novo DataFrame que tem exatamente as partições numPartitions.
repartition(numPartitions, *cols) Devolve uma nova DataFrame particionada pelas expressões de partição dadas.
repartitionByRange(numPartitions, *cols) Devolve uma nova DataFrame particionada pelas expressões de partição dadas.
repartitionById(numPartitions, partitionIdCol) Devolve uma nova DataFrame particionada pela expressão de ID de partição dada.

Remodelação

Método Descrição
unpivot(ids, values, variableColumnName, valueColumnName) Despivote um DataFrame de formato largo para formato longo.
melt(ids, values, variableColumnName, valueColumnName) Pseudónimo de despivô.
transpose(indexColumn) Transpõe um DataFrame de modo que os valores na coluna de índice especificada se tornem as novas colunas.

Tratamento de dados em falta

Método Descrição
dropna(how, thresh, subset) Devolve um novo DataFrame omitindo linhas com valores nulos ou NaN.
fillna(value, subset) Devolve um novo DataFrame cujos valores nulos são preenchidos com novos valores.
replace(to_replace, value, subset) Devolve um novo DataFrame que substitui um valor por outro.

Funções estatísticas

Método Descrição
approxQuantile(col, probabilities, relativeError) Calcula os quantículos aproximados das colunas numéricas de um DataFrame.
corr(col1, col2, method) Calcula a correlação de duas colunas de um DataFrame como um valor duplo.
cov(col1, col2) Calcule a covariância amostral para as colunas dadas, especificadas pelos seus nomes.
crosstab(col1, col2) Calcula uma tabela de frequências par a par das colunas dadas.
freqItems(cols, support) Encontrar itens frequentes para colunas, possivelmente com falsos positivos.

Operações de esquema

Método Descrição
to(schema) Devolve um novo DataFrame onde cada linha é reconciliada para corresponder ao esquema especificado.
alias(alias) Devolve um novo DataFrame com um alias definido.

Iteration

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.

Cache e persistência

Método Descrição
cache() Persiste o DataFrame com o nível de armazenamento predefinido (MEMORY_AND_DISK_DESER).
persist(storageLevel) Define o nível de armazenamento para persistir o conteúdo do DataFrame entre operações.
unpersist(blocking) Marca o DataFrame como não persistente e remove todos os blocos da memória e do disco.

Pontos de verificação

Método Descrição
checkpoint(eager) Devolve uma versão checkpoint deste DataFrame.
localCheckpoint(eager, storageLevel) Devolve uma versão localmente checkpoint deste DataFrame.

Operações de streaming

Método Descrição
withWatermark(eventTime, delayThreshold) Define uma marca de água de tempo de evento para este DataFrame.

Dicas de otimização

Método Descrição
hint(name, *parameters) Especifica alguma dica sobre o DataFrame atual.

Limites e deslocamentos

Método Descrição
limit(num) Limita a contagem de resultados ao número especificado.
offset(num) Devolve um novo DataFrame ao saltar as primeiras n linhas.

Transformações avançadas

Método Descrição
transform(func, *args, **kwargs) Devolve um novo DataFrame. Sintaxe concisa para encadear transformações personalizadas.

Métodos de conversão

Método Descrição
toPandas() Devolve o conteúdo deste DataFrame como Pandas pandas. DataFrame.
toArrow() Devolve o conteúdo deste DataFrame como PyArrow pyarrow. Mesa.
pandas_api(index_col) Converte o DataFrame existente num DataFrame pandas-on-Spark.
mapInPandas(func, schema, barrier, profile) Mapeia um iterador de lotes no DataFrame atual usando uma função nativa em Python.
mapInArrow(func, schema, barrier, profile) Mapeia um iterador de lotes no DataFrame atual usando uma função nativa em Python que é executada no pyarrow. RecordBatch.

Gravando dados

Método Descrição
writeTo(table) Cria um construtor de configuração de escrita para fontes v2.
mergeInto(table, condition) Funde um conjunto de atualizações, inserções e eliminações baseadas numa tabela de origem numa tabela alvo.

Comparação de DataFrame

Método Descrição
sameSemantics(other) Retorna Verdadeiro quando os planos lógicos de consulta dentro de ambos os DataFrames são iguais.
semanticHash() Devolve um código hash do plano lógico de consulta contra este DataFrame.

Metadados e informação de ficheiros

Método Descrição
inputFiles() Devolve um instantâneo de melhor esforço dos ficheiros que compõem este DataFrame.

Funcionalidades avançadas de SQL

Método Descrição
isLocal() Retornos Verdadeiro se os métodos collect e take puderem ser executados localmente.
asTable() Converte o DataFrame num objeto TableArg, que pode ser usado como argumento de tabela numa TVF.
scalar() Devolva um objeto Coluna para uma Subconsulta SCALAR contendo exatamente uma linha e uma coluna.
exists() Devolva um objeto Coluna para uma Subconsulta EXISTS.

Exemplos

Operações básicas de DataFrame

# 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

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

Joins

# 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

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