spark(2.3)无法识别通过hivealtertable命令添加的parquet表中的新列

omqzjyyz  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(381)

我有一个HiveParquet表,我正在创建使用spark 2.3 api df.saveAstable . 有一个单独的配置单元过程,可以更改相同的Parquet地板表以添加列(基于需求)。但是,下次我尝试将同一个Parquet表读入spark dataframe时,使用hive alter table命令添加到Parquet表的新列不会出现在 df.printSchema 输出。
根据初步分析,似乎存在一些冲突,spark使用自己的模式,而不是读取配置单元元存储。因此,我尝试了以下选项:
更改Spark设置: spark.sql.hive.convertMetastoreParquet=false 刷新spark目录: spark.catalog.refreshTable("table_name") 然而,上述两种选择并不能解决问题。
任何建议或替代方案都会非常有用。

dauxcl2d

dauxcl2d1#

这听起来像spark-21841中描述的bug。jira描述还包含一个可能的解决方案的想法:
…有趣的是,如果您以不同的方式创建表,例如: spark.sql("create table mydb.t1 select ip_address from mydb.test_table limit 1") 在mydb.t1上运行alter表 val t1 = spark.table("mydb.t1") 然后它正常工作。。。

相关问题