glob () не может найти имена файлов с многобайтовыми символами в Windows?

Это невозможно. На данный момент (Spark 1.6.0 / 2.2.0 SNAPSHOT) Spark DataFrameWriter поддерживает только четыре режима записи:

  • SaveMode.Overwrite: перезаписать существующие данные.
  • SaveMode.Append: добавьте данные.
  • SaveMode.Ignore: проигнорируйте операцию (т. е. нет-op).
  • SaveMode.ErrorIfExists: параметр по умолчанию, выдайте исключение в runtime.

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

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

30
задан Wesley Murch 12 March 2012 в 01:08
поделиться