Похоже, до этого момента, как указывал Би Рико выше, вы выполняли «ленивые» операции над своим набором данных.Вот подробное описание того, что означает отложенное выполнение .
По сути, любые преобразования, которые вы выполняете в своем наборе данных (например, map, flatMap, filter и т. Д.), Не будут выполняться до тех пор, пока не будет вызвано действие 1008 *.Действие выполняет то, что требует использования результата, а некоторые примеры записывают в файл (saveAsTable), count (), take () и т. Д.
Поскольку у вас есть 6000 миллионов записей неизвестного размера, звучитнапример, ваш набор данных довольно большой, и это, вероятно, является огромным фактором того, почему для выполнения действий требуется так много времени.
При использовании Spark с большими данными общая рекомендация заключается в работе с меньшим подмножеством вашихданные.Это позволяет вам проверять правильность ваших преобразований и кода и получать результаты в разумные сроки.Затем вы можете применить свою работу ко всему набору данных.
Редактирование 21 сентября 2018 года: рекомендации по ускорению обработки
Трудно сказать без дополнительной информации, но вот несколько общих советов.
- Избегайте команд, вызывающих тасование (например, groupByKey).Перестановка перераспределяет все данные в соответствующие разделы перед их объединением.Это приводит к большому количеству сетевых операций ввода / вывода.
- Попробуйте правильно разделить ваши данные.Это максимально увеличит параллельную обработку ваших данных
- Добавьте больше узлов в ваш кластер и / или увеличьте размер (ЦП / память) ваших узлов.Это не точная наука.Больше узлов может помочь вместе с разбиением.Увеличивайте размер узлов только в том случае, если они ограничены в ресурсах.