Для «итеративных алгоритмов», в чем преимущество преобразования в RDD, а затем обратно в Dataframe? - PullRequest
3 голосов
/ 29 апреля 2020

Я читаю High Performance Spark , и автор делает следующее утверждение:

Хотя оптимизатор Catalyst довольно мощный, один из случаев, когда он в настоящее время сталкивается с проблемами с очень большими планами запросов. Эти планы запросов, как правило, являются результатом итерационных алгоритмов, таких как алгоритмы графов или алгоритмы машинного обучения. Одним из простых обходных путей для этого является преобразование данных в RDD и обратно в DataFrame / Dataset в конце каждой итерации, как показано в примере 3-58.

Пример 3-58 помечен как «Вокруг». поездка через RDD, чтобы сократить план запроса "и воспроизводится ниже:

val rdd = df.rdd
rdd.cache()
sqlCtx.createDataFrame(rdd. df.schema)

Кто-нибудь знает, что является основной причиной, которая делает этот обходной путь необходимым?

Для справки, отчет об ошибке был подана для решения этой проблемы и доступна по следующей ссылке: https://issues.apache.org/jira/browse/SPARK-13346

Похоже, что нет исправления, но сопровождающие закрыли проблему и, похоже, не считают, что они нужно заняться этим.

...