DataFrameWriter – třída

Rozhraní používané k zápisu datového rámce do externích systémů úložiště (např. systémů souborů, úložišť klíč-hodnota atd.).

Podporuje Spark Connect.

Syntaxe

Používá DataFrame.write se pro přístup k tomuto rozhraní.

Methods

Metoda Description
mode(saveMode) Určuje chování, když data nebo tabulka již existují.
format(source) Určuje podkladový výstupní zdroj dat.
option(key, value) Přidá výstupní možnost pro podkladový zdroj dat.
options(**options) Přidá možnosti výstupu pro podkladový zdroj dat.
partitionBy(*cols) Rozdělí výstup podle zadaných sloupců v systému souborů.
bucketBy(numBuckets, col, *cols) Vysadí výstup podle daných sloupců.
sortBy(col, *cols) Seřadí výstup v každém kontejneru podle zadaných sloupců v systému souborů.
clusterBy(*cols) Seskupí data podle daných sloupců za účelem optimalizace výkonu dotazů.
save(path, format, mode, partitionBy, **options) Uloží obsah datového rámce do zdroje dat.
insertInto(tableName, overwrite) Vloží obsah datového rámce do zadané tabulky.
saveAsTable(name, format, mode, partitionBy, **options) Uloží obsah datového rámce jako zadanou tabulku.
json(path, mode, compression, ...) Uloží obsah datového rámce ve formátu JSON na zadanou cestu.
parquet(path, mode, partitionBy, compression) Uloží obsah datového rámce ve formátu Parquet na zadanou cestu.
text(path, compression, lineSep) Uloží obsah datového rámce do textového souboru na zadanou cestu.
csv(path, mode, compression, sep, ...) Uloží obsah datového rámce ve formátu CSV na zadanou cestu.
xml(path, rowTag, mode, ...) Uloží obsah datového rámce ve formátu XML na zadanou cestu.
orc(path, mode, partitionBy, compression) Uloží obsah datového rámce ve formátu ORC na zadanou cestu.
excel(path, mode, dataAddress, headerRows) Uloží obsah datového rámce ve formátu aplikace Excel na zadanou cestu.
jdbc(url, table, mode, properties) Uloží obsah datového rámce do tabulky externí databáze prostřednictvím JDBC.

Režimy ukládání

Metoda mode() podporuje následující možnosti:

  • append: Připojte obsah tohoto datového rámce k existujícím datům.
  • přepsání: Přepište existující data.
  • error or errorifexists: Vyvolá výjimku, pokud data již existují (výchozí).
  • ignore: Tuto operaci bezobslužně ignorujte, pokud již data existují.

Příklady

Zápis do různých zdrojů dat

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

Použití formátu a uložení

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

Určení režimu ukládání

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

Dělení dat

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

Zápis do JDBC

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

Řetězení metod

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

Zápis do tabulek

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