4

我有一个使用 Spark 2.3 API 创建的 Hive Parquet 表df.saveAstable。有一个单独的 Hive 进程可以更改同一个 parquet 表以添加列(根据要求)。但是,下次当我尝试将同一个 parquet 表读入 Spark 数据帧时,使用 Hive Alter Table 命令添加到 parquet 表中的新列未显示在df.printSchema输出中。

根据初步分析,似乎可能存在一些冲突,Spark 使用自己的架构而不是读取 Hive 元存储。因此,我尝试了以下选项:

更改火花设置: spark.sql.hive.convertMetastoreParquet=false 和刷新火花目录: spark.catalog.refreshTable("table_name")

但是,以上两个选项都不能解决问题。

任何建议或替代方案都会非常有帮助。

4

1 回答 1

2

这听起来像是SPARK-21841中描述的错误。JIRA 描述还包含可能的解决方法的想法:

...有趣的是,如果您以不同的方式创建表,例如:

spark.sql("create table mydb.t1 select ip_address from mydb.test_table limit 1")

在 mydb.t1 上运行你的 alter tableval t1 = spark.table("mydb.t1")

然后它可以正常工作...

于 2019-06-29T12:51:08.770 回答