Apache spark ValidationFailureSemanticException:分区规范包含非分区列
我正在尝试一个简单的用例,在S3上插入一个配置单元分区表。我正在EMR上的齐柏林飞艇笔记本上运行我的代码,下面是我的代码以及命令输出的屏幕截图。我检查了配置单元表和数据框的模式,列名称没有大小写差异。我得到下面提到的例外Apache spark ValidationFailureSemanticException:分区规范包含非分区列,apache-spark,hive,apache-spark-sql,hiveql,Apache Spark,Hive,Apache Spark Sql,Hiveql,我正在尝试一个简单的用例,在S3上插入一个配置单元分区表。我正在EMR上的齐柏林飞艇笔记本上运行我的代码,下面是我的代码以及命令输出的屏幕截图。我检查了配置单元表和数据框的模式,列名称没有大小写差异。我得到下面提到的例外 import org.apache.spark.sql.hive.HiveContext import sqlContext.implicits._ System.setProperty("hive.metastore.uris","thrift
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:partitionspec{month=,month=May}包含非分区列;
位于org.apache.spark.sql.hive.HiveExternalCatalog.withClient(HiveExternalCatalog.scala:106)
您需要在insert语句之前放置一个命令,以便能够在运行时填充分区。默认情况下,动态分区模式设置为strict
spark.sql("set hive.exec.dynamic.partition.mode=nonstrict")
尝试添加该行,然后再次运行
编辑1:
我在您的附件图片中看到,当您执行csv_df.show()
时,您的薪资列将是最后一列,而不是月份列。尝试在insert语句中引用您的列,例如:insert into table_name partition(month)(第1列、第2列..)
Florin嗨,Florin,谢谢你的回复,我也试过了,但也有同样的错误。spark.sql(“set hive.exec.dynamic.partition.mode=nonstrict”)spark.sql(“插入覆盖表employee\u表分区(月)从csv中选择Emp\u Id、名字、工资、月份”))org.apache.spark.sql.AnalysisException:org.apache.hadoop.hive.ql.metadata.TABLE.ValidationFailureSemanticException:partition spec{Month=,Month=May}包含非分区列;你好,@Explorer,请阅读上面帖子中我的Edit1。