У меня есть довольно массивный файл паркета, где мне нужно изменить значения для одного из столбцов. Один из способов сделать это - обновить эти значения в исходных текстовых файлах и воссоздать паркет файл, но мне интересно, есть ли менее дорогое и общее упрощенное решение.
Обновление значений в файле паркета apache
Ответ 1
Давайте начнем с основ
- Паркет, если файлФормат, но должен быть сохранен в файловой системе.
- Поддерживается ли поддержка Parquet.?
- Разрешает ли FileSystem (HDFS) добавлять в файл.
- Даже если все верно, среда работы (Spark) может обрабатывать append
Ответы:
-
Паркет: паркет .hadoop.ParquetFileWriter поддерживает только CREATE и OVERWRITE, но не поддерживает режим добавления. (Не уверен, но это может измениться в другой реализации, дизайн паркета поддерживает добавления)
-
HDFS hdfs позволяет добавлять файлы, используя (свойство dfs.support.append)
-
База Spark не поддерживает добавление существующих паркетных файлов.
Пройдите
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 во время запроса.