Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark ValidationFailureSemanticException:分区规范包含非分区列_Apache Spark_Hive_Apache Spark Sql_Hiveql - Fatal编程技术网

Apache spark ValidationFailureSemanticException:分区规范包含非分区列

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

我正在尝试一个简单的用例,在S3上插入一个配置单元分区表。我正在EMR上的齐柏林飞艇笔记本上运行我的代码,下面是我的代码以及命令输出的屏幕截图。我检查了配置单元表和数据框的模式,列名称没有大小写差异。我得到下面提到的例外

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。