Действия / преобразования на нескольких RDD одновременно в Spark
Я пишу приложение Spark (один клиент) и имею дело с множеством небольших файлов, для которых я хочу запустить алгоритм. Тот же алгоритм для каждого из них. Но файлы не могут быть загружены в один и тот же RDD для работы алгоритма, потому что он должен сортировать данные в пределах одной границы файла.
Сегодня я работаю с файлом за раз. В результате у меня плохое использование ресурсов (небольшое количество данных на каждое действие, много накладных расходов)
Есть ли способ выполнить одно и то же действие / преобразование на нескольких RDD одновременно (и только с помощью одной программы драйвера)? Или я должен искать другую платформу? Потому что такой режим работы не является классическим для Spark.
1 ответ
Если вы используете SparkContext.wholeTextFiles
затем вы можете прочитать файлы в один RDD, и каждый раздел RDD будет иметь содержимое одного файла. Затем вы можете работать с каждым разделом отдельно, используя SparkContext.mapPartitions(sort_file)
, где sort_file
это функция сортировки, которую вы хотите применить к каждому файлу. Это будет использовать параллелизм лучше, чем ваше текущее решение, если ваши файлы достаточно малы, чтобы их можно было обрабатывать в одном разделе.