Apache spark 阅读蜂巢表并将其转换为拼花地板表

Apache spark 阅读蜂巢表并将其转换为拼花地板表,apache-spark,hive,apache-spark-sql,parquet,Apache Spark,Hive,Apache Spark Sql,Parquet,更准确地说,数据来自配置单元表 第一个表具有以下属性: Serde Library org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe InputFormat org.apache.hadoop.mapred.SequenceFileInputFormat OutputFormat org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat Serde Librar

更准确地说,数据来自配置单元表

第一个表具有以下属性:

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
这张桌子应该改造成镶木地板,并具有

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 

希望有人能帮助我

您不能在同一个表中混合不同的文件格式,也不能更改包含数据的表的文件格式。(更准确地说,您可以执行这些操作,但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语句,也可以使用
Spark.SQL(…)
语句(逐个)从Spark执行这些SQL语句。

是否要将这些SQL语句追加到已存在的表中?如果是这样,它将提取现有表的属性并使用这些属性。我不是附加到或已经存在的表。基本上,我的问题是,如何将具有HiveSequenceFileOutputFormat的表的格式更改为具有MapredParquetOutputFormat的新表?希望这能澄清一点。你能举个例子吗?至少感谢你的回答:)