我有一个正在使用Spark 2.3 API df.saveAstable
创建的Hive Parquet表。有一个单独的Hive流程,该流程会更改同一实木复合地板表以添加列(根据要求)。
但是,下次当我尝试将相同的实木复合地板表读入Spark数据帧时,使用Hive Alter Table命令添加到实木复合地板表中的新列不会显示在df.printSchema
输出中。
根据初步分析,似乎可能存在一些冲突,并且Spark使用其自己的架构而不是读取Hive元存储库。 因此,我尝试了以下选项:
更改火花设置:
spark.sql.hive.convertMetastoreParquet=false
和刷新spark目录:
spark.catalog.refreshTable("table_name")
但是,以上两个选项不能解决问题。
任何建议或替代方法都将非常有帮助。
答案 0 :(得分: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")
然后它可以正常工作...