Я использую Spark 2.3 для преобразования некоторых данных CSV в ORC для использования с Amazon Athena; это работает нормально! Athena лучше всего работает с файлами, которые не слишком малы, поэтому после небольшой манипуляции с данными я использую Spark, чтобы объединить разделы в один раздел перед записью на диск, например:
df.coalesce(1).write.orc("out.orc", compression='zlib', mode='append')
В результате получается один файл ORC с оптимальным размером для использования с Athena. Однако этап объединения занимает очень длительное время. Это добавляет около 33% к общему количеству времени для преобразования данных!
Это, очевидно, связано с тем, что Spark не может распараллелить шаг объединения при сохранении в один файл. Когда я создаю столько же разделов, сколько доступно процессоров, запись ORC на диск происходит намного быстрее!
У меня вопрос: можно ли распараллелить запись ORC на диск и затем каким-то образом объединить файлы? Это позволило бы мне распараллелить запись и объединить файлы, не сжимая все на одном процессоре?