У меня огромный конвейер ETL, использующий Spark. Для каждой задачи преобразования я хотел бы написать простой модульный тест, в основном имеющий запеченный ввод и ожидаемый вывод. Это позволит мне профилировать и реорганизовывать мою кодовую базу без страха.
Мне удалось это сделать, и она отлично работает, но это действительно медленно. Даже при очень маленьком входном сигнале Spark требуется long время для его запуска (45 секунд с 16 ядрами, автономная искра работает внутри контейнера docker). Я был бы счастлив, если бы смог получить его менее чем за 10 секунд с 4 ядрами (ноутбук).
Задача преобразования относительно проста, эквивалентный код в pandas будет выполняться за миллисекунды. Мне удалось немного его оптимизировать, уменьшив default.parallelism
и sql.shuffle.partitions
до 32 вместо 200, но мне интересно, есть ли варианты конфигурации или другие идеи для ускорения зажигания. В идеале я хотел бы заставить Spark никогда не использовать диск, избегать накладных расходов, связанных с непротиворечивостью данных и другими не относящимися к делу вещами в моем сценарии.
Другие предложения, связанные с автоматическим тестированием заданий Spark, приветствуются, так как в Интернете мало материалов. на эту тему.