我有一个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")
然而,上述两种选择并不能解决问题。
任何建议或替代方案都会非常有用。
1条答案
按热度按时间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")
然后它正常工作。。。