При записи в hdfs, как перезаписать только необходимые папки? - PullRequest
0 голосов
/ 17 января 2019

Итак, у меня есть эта папка, назовем ее /data.

И в нем есть разделы, например: /data/partition1, /data/partition2.

Я читаю новые данные из kafka и представляю, что мне нужно только обновить /data/partition2. Я делаю:

dataFrame
    .write
    .mode(SaveMode.Overwrite)
    .partitionBy("date", "key")
    .option("header", "true")
    .format(format)
    .save("/data")

и он успешно обновляет /data/partition2, но /data/partition1 больше нет ... Как заставить SaveMode.Overwrite в Spark не касаться разделов HDFS, которые не нужно обновлять?

1 Ответ

0 голосов
/ 17 января 2019

Вы используете SaveMode.Overwrite, который удаляет ранее существующие каталоги. Вместо этого вы должны использовать SaveMode.Append

ПРИМЕЧАНИЕ: Операция добавления не обходится без затрат. Когда вы вызываете функцию сохранения в режиме добавления, спарк должен обеспечить уникальность имен файлов, чтобы случайно не перезаписать существующий файл. Чем больше файлов у вас уже есть в каталоге, тем больше времени занимает операция сохранения. Если вы говорите о нескольких файлах, то это очень экономически эффективная операция. Но если у вас есть много терабайт данных в тысячах файлов в исходном каталоге (как в моем случае), вам следует использовать другой подход.

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