Partilhar via


Classe DataFrameWriter

Interface usada para escrever um DataFrame para sistemas de armazenamento externos (por exemplo, sistemas de ficheiros, armazenamentos-chave-valor, etc).

Suporta Spark Connect

Sintaxe

Use DataFrame.write para aceder a esta interface.

Methods

Método Descrição
mode(saveMode) Especifica o comportamento quando já existem dados ou tabelas.
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 dadas no sistema de ficheiros.
bucketBy(numBuckets, col, *cols) Faz buckets da saída pelas colunas dadas.
sortBy(col, *cols) Ordena a saída em cada balde pelas colunas dadas no sistema de ficheiros.
clusterBy(*cols) Agrupa os dados pelas colunas indicadas para otimizar o desempenho da consulta.
save(path, format, mode, partitionBy, **options) Guarda o conteúdo do DataFrame numa fonte de dados.
insertInto(tableName, overwrite) Insere o conteúdo do DataFrame na tabela especificada.
saveAsTable(name, format, mode, partitionBy, **options) Guarda o conteúdo do DataFrame como tabela especificada.
json(path, mode, compression, ...) Guarda o conteúdo do DataFrame em formato JSON no caminho especificado.
parquet(path, mode, partitionBy, compression) Guarda o conteúdo do DataFrame no formato Parquet no caminho especificado.
text(path, compression, lineSep) Guarda o conteúdo do DataFrame num ficheiro de texto no caminho especificado.
csv(path, mode, compression, sep, ...) Guarda o conteúdo do DataFrame em formato CSV no caminho especificado.
xml(path, rowTag, mode, ...) Guarda o conteúdo do DataFrame em formato XML no caminho especificado.
orc(path, mode, partitionBy, compression) Guarda o conteúdo do DataFrame em formato ORC no caminho especificado.
excel(path, mode, dataAddress, headerRows) Guarda o conteúdo do DataFrame em formato Excel no caminho especificado.
jdbc(url, table, mode, properties) Guarda o conteúdo do DataFrame numa tabela de base de dados externa via JDBC.

Modos de Gravação

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

  • anexar: Anexar o conteúdo deste DataFrame aos dados existentes.
  • sobrescrever: Sobrescrever dados existentes.
  • erro ou errorifexists: Lançar uma exceção se os dados já existirem (padrão).
  • ignorar: Ignorar silenciosamente esta operação se os dados já existirem.

Exemplos

Escrita em diferentes fontes de dados

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

Usar formato e guardar

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

Especificação do modo de gravação

# 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

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

Escrever para a JDBC

# 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

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

Escrita para tabelas

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