Избегайте дублирования раздела в datalake - PullRequest
0 голосов
/ 02 апреля 2019

Когда я записываю файл партера, я передаю одно из значений столбца как раздел, но когда фрейм данных пуст, он не создает раздел (как ожидается) и ничего не делает. Чтобы преодолеть это, если я пройду

df.partitionOf("department=One").write(df)

и когда информационный кадр НЕ пуст, он создает два уровня раздела

location/department=One/department=One

Есть ли способ пропустить один, если раздел уже существует, чтобы избежать дублирования?

1 Ответ

0 голосов
/ 05 апреля 2019

Какой путь вы проходите, когда пишете фрейм данных? Я не нашел функцию partitionOf для искрового фрейма данных.

Я думаю, что это должно работать для вашего случая

df.write.mode("append").partitionBy("department").parquet("location/")

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

скала код:

val dfi=spark.read.parquet(pathPrefix+finalFile).select(col("department"))
val finalDf = df.join(dfi, df.col("department") == dfi.col("department"), "left_outer")
                 .where(dfi.col("department").isNull())
                 .select(dfl.columns.map(col):_*)
finalDf.write.mode("append").partitionBy("department").parquet("location/")

Вы можете оптимизировать первый шаг (создание dfi), находя ключи раздела в вашем Dataframe и сохраняя только те ключи раздела, для которых существует путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...