Обновление значений в файле паркета apache

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

Ответ 1

Давайте начнем с основ

  • Паркет, если файлФормат, но должен быть сохранен в файловой системе.
  • Поддерживается ли поддержка Parquet.?
  • Разрешает ли FileSystem (HDFS) добавлять в файл.
  • Даже если все верно, среда работы (Spark) может обрабатывать append

Ответы:

  • Паркет: паркет .hadoop.ParquetFileWriter поддерживает только CREATE и OVERWRITE, но не поддерживает режим добавления. (Не уверен, но это может измениться в другой реализации, дизайн паркета поддерживает добавления)

  • HDFS hdfs позволяет добавлять файлы, используя (свойство dfs.support.append)

  • База Spark не поддерживает добавление существующих паркетных файлов.

    https://issues.apache.org/jira/browse/SPARK-18199

Пройдите

http://bytepadding.com/big-data/spark/read-write-parquet-files-using-spark/

http://bytepadding.com/linux/understanding-basics-of-filesystem/

для детального понимания.

Ответ 2

Вы должны повторно создать файл, это путь Hadoop. Особенно, если файл сжат.

Другой подход (очень распространенный в Big-data) - это сделать обновление в другом файле Parquet (или ORC), затем JOIN/UNION во время запроса.