Как избежать создания дубликатов подпапок при записи в раздел - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь перезаписать один раздел, используя приведенный ниже код, но вместо перезаписи / замены существующего раздела в нем создается подпапка.

Пожалуйста, посоветуйте, как мне заставить его работать.Ниже код создает папку как /data/input/STATS/my_date=2018-01-03/my_date=2018-01-03/

Но я хочу заменить существующую папку /data/input/STATS/my_date=2018-01-03/my_date=2018-01-03/

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

Посоветуйте, пожалуйста, как мне заставить его работать.Код ниже создает папку как

/data/input/STATS/my_date=2018-01-03/my_date=2018-01-03/

df.write.mode("Overwrite").partitionBy("my_date").parquet("/data/input/STATS/my_date=2018-01-03/")

Код выше создает папку как /data/input/STATS/my_date=2018-01-03/my_date=2018-01-03/

Я хочу это на Spark 1.6.2

1 Ответ

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

На самом деле приведенный выше код создает / заменяет любую папку (раздел) по указанному ниже пути

/data/input/STATS/my_date=2018-01-03/

Итак, если вы измените данные, будет вставлена ​​новая подпапка

/data/input/STATS/my_date=2018-01-03/my_date=2018-01-02
/data/input/STATS/my_date=2018-01-03/my_date=2018-01-03

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

df.write.mode(SaveMode.Overwrite).save("/root/path/to/data/partition_col=value")

, затем вы можете написать некоторый код, чтобы получить отдельный раздел из вашего кода, а затем использовать df.foreachPartition{partition=> some code } ипередать раздел в команду сохранения

Обновление: мы можем выбрать отдельный раздел и отфильтровать кадр данных и записать каждый отдельно

 val uniquePartitionNames = df.select($"colname").distinct().collect() 
  for (partition <- uniquePartitionNames ) {
    val filteredDFBaseOnPartition = df.where($"colname" === partition)
    filteredDFBaseOnPartition .write.mode("Overwrite").save("path/colname="+partition)
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...