Класс DataFrameWriter

Интерфейс, используемый для записи кадра данных во внешние системы хранения (например, файловых систем, хранилищ ключей и т. д.).

Поддержка Spark Connect

Синтаксис

Используется DataFrame.write для доступа к этому интерфейсу.

Методы

Метод Описание
mode(saveMode) Указывает поведение, когда данные или таблица уже существуют.
format(source) Указывает базовый источник выходных данных.
option(key, value) Добавляет параметр вывода для базового источника данных.
options(**options) Добавляет параметры вывода для базового источника данных.
partitionBy(*cols) Секционирует выходные данные по заданным столбцам в файловой системе.
bucketBy(numBuckets, col, *cols) Сегментирует выходные данные по заданным столбцам.
sortBy(col, *cols) Сортирует выходные данные в каждом контейнере по заданным столбцам файловой системы.
clusterBy(*cols) Кластеризация данных по заданным столбцам для оптимизации производительности запросов.
save(path, format, mode, partitionBy, **options) Сохраняет содержимое кадра данных в источник данных.
insertInto(tableName, overwrite) Вставляет содержимое кадра данных в указанную таблицу.
saveAsTable(name, format, mode, partitionBy, **options) Сохраняет содержимое кадра данных в виде указанной таблицы.
json(path, mode, compression, ...) Сохраняет содержимое кадра данных в формате JSON по указанному пути.
parquet(path, mode, partitionBy, compression) Сохраняет содержимое кадра данных в формате Parquet по указанному пути.
text(path, compression, lineSep) Сохраняет содержимое кадра данных в текстовом файле по указанному пути.
csv(path, mode, compression, sep, ...) Сохраняет содержимое кадра данных в формате CSV по указанному пути.
xml(path, rowTag, mode, ...) Сохраняет содержимое кадра данных в формате XML по указанному пути.
orc(path, mode, partitionBy, compression) Сохраняет содержимое кадра данных в формате ORC по указанному пути.
excel(path, mode, dataAddress, headerRows) Сохраняет содержимое кадра данных в формате Excel по указанному пути.
jdbc(url, table, mode, properties) Сохраняет содержимое кадра данных во внешнюю таблицу базы данных с помощью JDBC.

Режимы сохранения

Метод mode() поддерживает следующие параметры:

  • добавление содержимого этого кадра данных к существующим данным.
  • перезапись: перезаписать существующие данные.
  • ошибкаили ошибка: исключение, если данные уже существуют (по умолчанию).
  • игнорируйте эту операцию, если данные уже существуют.

Примеры

Запись в разные источники данных

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

Использование формата и сохранения

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

Указание режима сохранения

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

Секционирование данных

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

Запись в JDBC

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

Цепочка методов

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

Запись в таблицы

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