Прочитайте таблицу Hive и преобразуйте ее в Parquet Table - PullRequest
0 голосов
/ 11 января 2019

Данные взяты из таблицы Hive, точнее,

Первая таблица имеет свойства

Serde Library   org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe  
InputFormat org.apache.hadoop.mapred.SequenceFileInputFormat    
OutputFormat    org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat 

Эта таблица должна быть преобразована, чтобы иметь паркет и иметь свойства

Serde Library   org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe 
InputFormat org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat   
OutputFormat    org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat

Выполнен следующий код Scala Spark:

val df = spark.sql("SELECT * FROM table")
df.write.format("parquet").mode("append").saveAsTable("table")

Это приводит к нежелательным свойствам:

Serde Library   org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe  
InputFormat org.apache.hadoop.mapred.SequenceFileInputFormat    
OutputFormat    org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat 

Надеюсь, кто-нибудь сможет мне помочь

1 Ответ

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

Вы не можете смешивать различные форматы файлов в одной и той же таблице, а также нельзя изменять формат файла таблицы с данными в ней. (Точнее, вы можете делать эти вещи, но ни Hive, ни Spark не смогут прочитать данные в формате, который не соответствует метаданным.)

Вам следует записать данные в новую таблицу, убедиться, что она соответствует вашим ожиданиям, затем переименовать или удалить старую таблицу и, наконец, переименовать новую таблицу в старое имя. Например:

CREATE TABLE new_table STORED AS PARQUET AS SELECT * FROM orig_table;
ALTER TABLE orig_table RENAME TO orig_table_backup;
ALTER TABLE new_table RENAME TO orig_table;

Вы можете выполнить эти операторы SQL в сеансе Hive напрямую или из Spark, используя spark.sql(...) операторы (по одному).

...