Хранение данных в базе данных в PySpark (Azure - DataBricks) очень медленное - PullRequest
0 голосов
/ 19 сентября 2018

Я работаю с большим набором данных, который имеет около 6000 миллионов записей, я успешно выполнил все вычисления / операции.В конце, пока я собираюсь сохранить данные в базе данных (DBFS), используя следующую команду: это занимает больше времени (более 25-30 часов), даже не завершается.Может кто-нибудь дать мне хороший подход для обработки таких огромных данных.

df_matches_ml_target.write.mode("overwrite").saveAsTable("Demand_Supply_Match_ML")

Дайте мне знать, если вам нужна дополнительная информация по этому вопросу.

1 Ответ

0 голосов
/ 19 сентября 2018

Похоже, до этого момента, как указывал Би Рико выше, вы выполняли «ленивые» операции над своим набором данных.Вот подробное описание того, что означает отложенное выполнение .

По сути, любые преобразования, которые вы выполняете в своем наборе данных (например, map, flatMap, filter и т. Д.), Не будут выполняться до тех пор, пока не будет вызвано действие 1008 *.Действие выполняет то, что требует использования результата, а некоторые примеры записывают в файл (saveAsTable), count (), take () и т. Д.

Поскольку у вас есть 6000 миллионов записей неизвестного размера, звучитнапример, ваш набор данных довольно большой, и это, вероятно, является огромным фактором того, почему для выполнения действий требуется так много времени.

При использовании Spark с большими данными общая рекомендация заключается в работе с меньшим подмножеством вашихданные.Это позволяет вам проверять правильность ваших преобразований и кода и получать результаты в разумные сроки.Затем вы можете применить свою работу ко всему набору данных.

Редактирование 21 сентября 2018 года: рекомендации по ускорению обработки

Трудно сказать без дополнительной информации, но вот несколько общих советов.

  • Избегайте команд, вызывающих тасование (например, groupByKey).Перестановка перераспределяет все данные в соответствующие разделы перед их объединением.Это приводит к большому количеству сетевых операций ввода / вывода.
  • Попробуйте правильно разделить ваши данные.Это максимально увеличит параллельную обработку ваших данных
  • Добавьте больше узлов в ваш кластер и / или увеличьте размер (ЦП / память) ваших узлов.Это не точная наука.Больше узлов может помочь вместе с разбиением.Увеличивайте размер узлов только в том случае, если они ограничены в ресурсах.
...