Доступ к значению df.write.partitionBy в имени файла и выполнение преобразований при сохранении - PullRequest
0 голосов
/ 30 марта 2019

Я делаю что-то вроде

df.write.mode("overwrite").partitionBy("sourcefilename").format("orc").save("s3a://my/dir/path/output-data");

Приведенный выше код успешно генерирует имя файла orc с каталогом раздела, однако наименование выглядит как part-0000.

Мне нужно изменить раздел по значению (sourcefilename) при сохранении, например. если имя исходного файла ABC, тогда каталог раздела (который будет создан при выполнении записи) должен быть 123, если DEF, то 345 и так далее.

Как мы можем выполнить вышеуказанные требования? Я использую AWS S3 для чтения и записи файлов.

Я использую Spark 2.x и Scala 2.11.

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Учитывая, что в этом примере показано общее описание DF Writer

df.write.partitionBy("EVENT_NAME","dt","hour").save("/apps/hive/warehouse/db/sample")

формат, тогда ваш подход должен заключаться в создании дополнительного столбца xc, который устанавливается UDF, или некоторого def или val, который устанавливает xc в соответствии с именем, например, ABC -> 123 и т. Д. Затем вы разбиваете этот столбец xc и принимаете, что part-xxxxx именно так и работает в Spark.

Затем вы можете сами переименовать файлы с помощью скрипта.

0 голосов
/ 01 апреля 2019

Стиль part-1234 - это то, как работа разбивается на части: разные задачи получают свой собственный раздел источника разделенных данных и сохраняют его с нумерацией, чтобы гарантировать, что никакая другая задача не генерирует выходные данные с таким же именем.

Это имеет основополагающее значение для получения производительности параллельного выполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...