Hive SaveAsTable создает новый файл таблицы Parquet для каждого запуска - PullRequest
0 голосов
/ 21 мая 2018

У меня есть следующий код Scala, который я использую для записи данных из файла json в таблицу в Hive.import org.apache.spark.SparkConf import org.apache.spark.sql.SQLContext

val conf = new SparkConf().setAppName("App").setMaster("local")

import org.apache.spark.sql.hive._

val hiveContext = new HiveContext(sc)
val stg_comments = hiveContext.read.schema(buildSchema()).json(<path to json file)

comment.write.mode("append").saveAsTable(<table name>)

В моих данных json есть символы перевода строки и возврата каретки в значениях полей, поэтому я не могу просто вставить записи в Hive(поскольку таблицы Hive по умолчанию не хранят символы новой строки и возврата каретки в значениях данных) и, следовательно, мне нужно использовать параметр SaveAsTable .Проблема здесь заключается в том, что каждый раз, когда файл json читается и новые записи добавляются к существующей таблице, новый файл паркета создается в каталоге таблиц в каталоге хранилища Hive.Это приводит к действительно маленьким маленьким паркетным файлам в каталоге.Я хотел бы, чтобы данные были добавлены в существующий файл паркета.Мы знаем, как это сделать?Спасибо!

1 Ответ

0 голосов
/ 21 мая 2018

Это ожидаемое поведение.Здесь нет опции добавления к существующему файлу.Каждое задание имеет свой набор задач, каждое задание имеет свой выходной файл.repartitioning перед перезаписью может уменьшить количество записанных файлов, но не мешает созданию новых файлов.

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

...