【问题标题】:ValidationFailureSemanticException: Partition spec contains non-partition columnsValidationFailureSemanticException:分区规范包含非分区列
【发布时间】:2021-01-21 23:43:48
【问题描述】:

我正在尝试在 S3 上插入配置单元分区表的简单用例。我在 EMR 上的 zeppelin notebook 上运行我的代码,下面是我的代码以及命令输出的屏幕截图。我检查了配置单元表和数据框的架构,列名没有大小写差异。我遇到了下面提到的异常。

import org.apache.spark.sql.hive.HiveContext
import sqlContext.implicits._

System.setProperty("hive.metastore.uris","thrift://datalake-hive-server2.com:9083")
val hiveContext = new HiveContext(sc)
hiveContext.setConf("hive.exec.dynamic.partition", "true")
hiveContext.setConf("hive.exec.dynamic.partition.mode", "nonstrict")

spark.sql("""CREATE EXTERNAL TABLE employee_table (Emp_Id STRING, First_Name STRING, Salary STRING)  PARTITIONED BY (Month STRING)  LOCATION 's3n://dev-emr-jupyter/anup/' 
TBLPROPERTIES ("skip.header.line.count"="1") """)


val csv_df = spark.read
         .format("csv")
         .option("header", "true").load("s3n://dev-emr-jupyter/anup/test_data.csv")
    
import org.apache.spark.sql.SaveMode
csv_df.registerTempTable("csv")

spark.sql(""" INSERT OVERWRITE TABLE employee_table PARTITION(Month) select Emp_Id, First_Name, Salary, Month from csv""")

org.apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.Table.ValidationFailureSemanticException: 分区规范 {month=, Month=May} 包含非分区列; 在 org.apache.spark.sql.hive.HiveExternalCatalog.withClient(HiveExternalCatalog.scala:106)

【问题讨论】:

    标签: apache-spark hive apache-spark-sql hiveql


    【解决方案1】:

    您需要在插入语句之前放置一个命令,以便能够在运行时填充分区。默认情况下,动态分区模式设置为严格。

    spark.sql("set hive.exec.dynamic.partition.mode=nonstrict")
    

    尝试添加该行并再次运行。

    编辑 1:

    我在您的随员图片中看到,当您执行csv_df.show() 时,您的薪水列是最后一个,而不是月份列。尝试在插入语句中引用您的列,例如:insert into table_name partition(month) (column1, column2..)..

    弗洛林

    【讨论】:

    • 嗨弗洛林,感谢您的回复我也尝试过,但得到了同样的错误。 spark.sql("set hive.exec.dynamic.partition.mode=nonstrict") spark.sql(""" INSERT OVERWRITE TABLE employee_table PARTITION(Month) select Emp_Id, First_Name, Salary, Month from csv""") org. apache.spark.sql.AnalysisException: org.apache.hadoop.hive.ql.metadata.Table.ValidationFailureSemanticException: 分区规范 {month=, Month=May} 包含非分区列;
    • 嗨,@Explorer,请从上面的帖子中阅读我的 Edit1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-22
    • 2021-10-13
    • 2015-02-11
    • 2011-10-22
    • 2018-08-30
    • 1970-01-01
    相关资源
    最近更新 更多