Condividi tramite


Classe DataFrameWriter

Interfaccia usata per scrivere un dataframe in sistemi di archiviazione esterni ,ad esempio file system, archivi chiave-valore e così via.

Supporta Spark Connect

Sintassi

Usare DataFrame.write per accedere a questa interfaccia.

Methods

metodo Descrizione
mode(saveMode) Specifica il comportamento quando esistono già dati o tabelle.
format(source) Specifica l'origine dati di output sottostante.
option(key, value) Aggiunge un'opzione di output per l'origine dati sottostante.
options(**options) Aggiunge le opzioni di output per l'origine dati sottostante.
partitionBy(*cols) Partiziona l'output in base alle colonne specificate nel file system.
bucketBy(numBuckets, col, *cols) Raggruppa l'output in base alle colonne specificate.
sortBy(col, *cols) Ordina l'output in ogni bucket in base alle colonne specificate nel file system.
clusterBy(*cols) Raggruppa i dati in base alle colonne specificate per ottimizzare le prestazioni delle query.
save(path, format, mode, partitionBy, **options) Salva il contenuto del dataframe in un'origine dati.
insertInto(tableName, overwrite) Inserisce il contenuto del dataframe nella tabella specificata.
saveAsTable(name, format, mode, partitionBy, **options) Salva il contenuto del dataframe come tabella specificata.
json(path, mode, compression, ...) Salva il contenuto del dataframe in formato JSON nel percorso specificato.
parquet(path, mode, partitionBy, compression) Salva il contenuto del dataframe in formato Parquet nel percorso specificato.
text(path, compression, lineSep) Salva il contenuto del dataframe in un file di testo nel percorso specificato.
csv(path, mode, compression, sep, ...) Salva il contenuto del dataframe in formato CSV nel percorso specificato.
xml(path, rowTag, mode, ...) Salva il contenuto del dataframe in formato XML nel percorso specificato.
orc(path, mode, partitionBy, compression) Salva il contenuto del dataframe in formato ORC nel percorso specificato.
excel(path, mode, dataAddress, headerRows) Salva il contenuto del dataframe in formato Excel nel percorso specificato.
jdbc(url, table, mode, properties) Salva il contenuto del dataframe in una tabella di database esterna tramite JDBC.

Modalità di salvataggio

Il mode() metodo supporta le opzioni seguenti:

  • append: accoda il contenuto del dataframe ai dati esistenti.
  • sovrascrittura: sovrascrivere i dati esistenti.
  • errori o errorifexists: genera un'eccezione se i dati esistono già (impostazione predefinita).
  • ignore: ignorare automaticamente questa operazione se i dati esistono già.

Examples

Scrittura in origini dati diverse

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

Uso del formato e del salvataggio

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

Specifica della modalità di salvataggio

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

Partizionamento dei dati

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

Scrittura in JDBC

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

Concatenamento dei metodi

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

Scrittura in tabelle

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