Здесь есть два отдельных вопроса.
- когда исполнитель переключается на другой раздел для запуска функции карты, нужно ли ему сохранять данные текущего раздела в памяти или на диске?
Ответ - да. Spark требуется один раздел для размещения в памяти, то есть когда исполнитель будет работать с разделом, он полностью его загрузит. Ранее обработанные разделы будут сохранены в памяти / диске в энергозависимом формате, что означает, что они не будут доступны для различных преобразований (см. кеш , чтобы исправить это).
Я предполагаю, что он будет напрямую записывать данные в новый файл паркета вместо сохранения данных текущего раздела (запись в паркет также является функцией, подобной карте?)
Вопрос не в том, является ли паркетподобная карте функция, но есть ли случайная граница между преобразованием и записью. То, как это работает, заключается в том, что все последующие преобразования, которые не требуют перемешивания формы stage , и исполнитель будет запускать раздел через всю стадию каждый раз, когда он загружается в память. Таким образом, если между преобразованием и записью нет случайной границы, каждый раздел будет записан отдельно. В этом легко убедиться, используя график исполнения Spark (первый удар по Google).