Pular para o conteúdo principal

Classe DataFrameWriter

Interface usada para gravar um DataFrame em sistemas de armazenamento externos (por exemplo, sistemas de arquivos, armazenamentos key-valor, etc.).

Compatível com Spark Connect

Sintaxe

Use DataFrame.write para acessar esta interface.

Métodos

Método

Descrição

mode(saveMode)

Especifica o comportamento quando os dados ou a tabela já existem.

format(source)

Especifica a fonte de dados de saída subjacente.

option(key, value)

Adiciona uma opção de saída para a fonte de dados subjacente.

options(**options)

Adiciona opções de saída para a fonte de dados subjacente.

partitionBy(*cols)

Particiona a saída pelas colunas especificadas no sistema de arquivos.

bucketBy(numBuckets, col, *cols)

Agrupa a saída pelas colunas fornecidas.

sortBy(col, *cols)

Ordena a saída em cada bucket pelas colunas especificadas no sistema de arquivos.

clusterBy(*cols)

Agrupa os dados pelas colunas fornecidas para otimizar o desempenho da consulta.

save(path, format, mode, partitionBy, **options)

Salva o conteúdo do DataFrame em uma fonte de dados.

insertInto(tableName, overwrite)

Insere o conteúdo do DataFrame na tabela especificada.

saveAsTable(name, format, mode, partitionBy, **options)

Salva o conteúdo do DataFrame como a tabela especificada.

json(path, mode, compression, ...)

Salva o conteúdo do DataFrame em formato JSON no caminho especificado.

parquet(path, mode, partitionBy, compression)

Salva o conteúdo do DataFrame no formato Parquet no caminho especificado.

text(path, compression, lineSep)

Salva o conteúdo do DataFrame em um arquivo de texto no caminho especificado.

csv(path, mode, compression, sep, ...)

Salva o conteúdo do DataFrame em formato CSV no caminho especificado.

xml(path, rowTag, mode, ...)

Salva o conteúdo do DataFrame em formato XML no caminho especificado.

orc(path, mode, partitionBy, compression)

Salva o conteúdo do DataFrame no formato ORC no caminho especificado.

excel(path, mode, dataAddress, headerRows)

Salva o conteúdo do DataFrame em formato Excel no caminho especificado.

jdbc(url, table, mode, properties)

Salva o conteúdo do DataFrame em uma tabela de banco de dados externa via JDBC.

Modos de salvamento

O método mode() suporta as seguintes opções:

  • append : Anexa o conteúdo deste DataFrame aos dados existentes.
  • Sobrescrever : Sobrescrever os dados existentes.
  • erro ou erroseexiste : Lança uma exceção se os dados já existirem (default).
  • ignore : Ignora silenciosamente esta operação se os dados já existirem.

Exemplos

Escrevendo para diferentes fontes de dados

Python
# Access DataFrameWriter through DataFrame
df = spark.createDataFrame([{"name": "Alice", "age": 30}])
df.write

# Write to JSON file
df.write.json("path/to/output.json")

# Write to CSV file with options
df.write.option("header", "true").csv("path/to/output.csv")

# Write to Parquet file
df.write.parquet("path/to/output.parquet")

# Write to a table
df.write.saveAsTable("table_name")

Usando a opção "formatar e salvar".

Python
# Specify format explicitly
df.write.format("json").save("path/to/output.json")

# With options
df.write.format("csv") \
.option("header", "true") \
.option("compression", "gzip") \
.save("path/to/output.csv")

Especificando o modo de salvamento

Python
# Overwrite existing data
df.write.mode("overwrite").parquet("path/to/output.parquet")

# Append to existing data
df.write.mode("append").parquet("path/to/output.parquet")

# Ignore if data exists
df.write.mode("ignore").json("path/to/output.json")

# Error if data exists (default)
df.write.mode("error").csv("path/to/output.csv")

Particionamento de dados

Python
# Partition by single column
df.write.partitionBy("year").parquet("path/to/output.parquet")

# Partition by multiple columns
df.write.partitionBy("year", "month").parquet("path/to/output.parquet")

# Partition with bucketing
df.write \
.bucketBy(10, "id") \
.sortBy("age") \
.saveAsTable("bucketed_table")

Escrevendo para JDBC

Python
# Write to database table
df.write.jdbc(
url="jdbc:postgresql://localhost:5432/mydb",
table="users",
mode="overwrite",
properties={"user": "myuser", "password": "mypassword"}
)

Encadeamento de métodos

Python
# Chain multiple configuration methods
df.write \
.format("parquet") \
.mode("overwrite") \
.option("compression", "snappy") \
.partitionBy("year", "month") \
.save("path/to/output")

Escrita em tabelas

Python
# Save as managed table
df.write.saveAsTable("my_table")

# Save as managed table with options
df.write \
.mode("overwrite") \
.format("parquet") \
.partitionBy("year") \
.saveAsTable("partitioned_table")

# Insert into existing table
df.write.insertInto("existing_table")

# Insert into existing table with overwrite
df.write.insertInto("existing_table", overwrite=True)