Spark(2.3)无法识别通过Hive Alter Table命令添加的Parquet表中的新列

时间:2019-06-28 21:57:30

标签: hadoop hive pyspark parquet apache-spark-2.3

我有一个正在使用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")

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

任何建议或替代方法都将非常有帮助。

1 个答案:

答案 0 :(得分:2)

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

  

...足够有趣的是,如果您创建表   类似于:

     

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

     

在mydb.t1 val t1 = spark.table("mydb.t1")

上运行您的alter table      

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