Я не смог найти ни одной дискуссии по теме ниже ни на одном форуме, который искал в интернете.Это может быть потому, что я новичок в Spark и Scala и не задаю действительный вопрос.Если есть какие-либо темы, обсуждающие ту же или аналогичную тему, ссылки будут очень полезны.:)
Я работаю над процессом, который использует Spark и Scala и создает файл, читая множество таблиц и получая множество полей, применяя логику к данным, извлеченным из таблиц.Итак, структура моего кода выглядит следующим образом:
val driver_sql = "SELECT ...";
var df_res = spark.sql(driver_sql)
var df_res = df_res.withColumn("Col1", <logic>)
var df_res = df_res.withColumn("Col2", <logic>)
var df_res = df_res.withColumn("Col3", <logic>)
.
.
.
var df_res = df_res.withColumn("Col20", <logic>)
По сути, существует запрос драйвера, который создает фрейм данных "driver".После этого выполняется отдельная логика (функции) на основе ключа или ключей в кадре данных драйвера для добавления новых столбцов / полей.«Логическая» часть - это не всегда однострочный код, иногда это отдельная функция, которая выполняет другой запрос, выполняет какое-то соединение с df_res и добавляет новый столбец. Количество записей также изменяется, поскольку в некоторых случаях я использую «внутреннее» объединение с другими таблицами / фреймами данных.
Итак, вот мои вопросы:
- Должен ли ясохраняться
df_res
в любой момент времени? - Можно ли снова и снова сохранять
df_res
после добавления столбцов?Я имею в виду, добавляет ли это значение? - Если я сохраняю
df_res
(только диск) каждый раз, когда добавляется новый столбец, заменяются ли данные на диске?Или это создает новую копию / версию df_res
на диске? - Есть ли лучшая техника для сохранения / кэширования данных в подобном сценарии (чтобы не делать много вещей в памяти)?