RDD полезны, поскольку они позволяют пользователям обрабатывать данные на уровне "строки" (или отдельного объекта json и т. д.) без необходимости загружать все данные в память. Драйвер выясняет, как распределять распределенные данные (или указатели на них) по рабочим процессам, и каждый раздел успешно выполняет код для каждой строки/строки/объекта. Затем, не собирая данные в драйвере, я могу сохранить результат каждого раздела в отдельный текстовый файл.
Фреймы данных. Как это работает? Я подозреваю, что это не то же самое, потому что я могу нормально обрабатывать журналы сервера за месяц с небольшим кластером из 8 узлов, используя RDD, но как только я попытаюсь даже загрузить распределенные данные с sql_context(spark_context).sql.read.json(s3path)
в a DataFrame он выдает всевозможные ошибки нехватки памяти, и задание прерывается. Набор данных точно совпадает с тем, который RDD выполняет должным образом, тот же кластер, тот же период времени.
Есть ли разница в том, как RDD и DataFrames обрабатывают загрузку памяти, в смысле, который может объяснить мои результаты? Пожалуйста, помогите мне понять различия между RDD и DataFRame, которые могут влиять на эти результаты. Спасибо.