【问题标题】:Operation not allowed when creating or inserting Hive table with partitions from Spark从 Spark 创建或插入带有分区的 Hive 表时不允许操作
【发布时间】:2018-11-11 06:16:34
【问题描述】:

我正在使用 Spark 2.2,并且正在尝试基于数据框创建 Hive 表。

我只能使用以下数据创建一个新的 Hive 表:

result.write.mode(SaveMode.Overwrite).saveAsTable("db.resultTable")

当我尝试对分区做同样的事情时:

result.write.mode(SaveMode.Overwrite).partitionBy("year", "month", "day").saveAsTable("db.resultTable")

我总是得到错误:

Exception in thread "main" org.apache.spark.sql.AnalysisException: Operation not allowed: ALTER TABLE RECOVER PARTITIONS only works on table with location provided: `db`.`resultTable`;

注意:尽管有错误,但它创建了一个包含正确列的表。它还创建了分区,并且表中有一个位置,其中包含 Parquet 文件 (/user/hive/warehouse/db.db/resultTable/year=2017/month=1/day=1)。但它包含数据。

我试图寻找一些答案,但还没有找到任何答案。根据这个thread,我做得很好。 (我也设置了hive.exec.dynamic.partition和hive.exec.dynamic.partition.mode)

有人知道我错过了什么或做错了什么吗?

【问题讨论】:

    标签: apache-spark hive


    【解决方案1】:

    不要将其保存为表格,而是将其保存为 HDFS 目录中的文件。

    result.write.mode(SaveMode.Overwrite).partitionBy("year", "month", "day").parquet("/path/to/table")
    

    【讨论】:

      猜你喜欢
      • 2019-02-16
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 2023-04-10
      • 2015-02-18
      • 2015-09-13
      • 2015-11-07
      • 1970-01-01
      相关资源
      最近更新 更多