У меня есть работа Spark, которая:
- Считывает данные из hdfs
- Проводит ли интенсивное преобразование без перемешивания и агрегирования (только операции с картами)
- Записывает результаты обратно в hdfs
Допустим, у меня есть 10 ГБ необработанных данных (40 блоков = 40 входных разделов), что приводит к 100 МБ обработанных данных. Чтобы не создавать много маленьких файлов в hdfs, я использую оператор "coalesce (1)", чтобы записать один файл с результатами.
При этом я запускаю только 1 задачу (из-за "coalesce (1)" и отсутствия перемешивания), которая обрабатывает все 10 ГБ в одном потоке.
Есть ли способ выполнить действительно интенсивную обработку в 40 параллельных задачах и сократить количество разделов непосредственно перед записью на диск и избежать перемешивания данных?
У меня есть идея, которая может сработать - кэшировать кадр данных в памяти после всей обработки (выполнить подсчет, чтобы заставить Spark кэшировать данные), а затем поместить "coalesce (1)" и записать кадр данных на диск