Hive 配置单元错误:Spark执行中查询中不支持的语言功能

Hive 配置单元错误:Spark执行中查询中不支持的语言功能,hive,pyspark,apache-spark-sql,Hive,Pyspark,Apache Spark Sql,SQL查询中NOT EXISTS子句的Spark SQL配置单元错误 以下“不存在”查询在配置单元提示符中正常运行: 从不存在的过渡t中选择a、b、c、d,从xyz\n ABC中选择a,其中a=a、b=b、c=c 但同样的程序在spark执行的查询中提供了错误不支持的语言特性 from pyspark import SparkContext sc =SparkContext() from pyspark.sql import HiveContext sqlContext = HiveCont

SQL查询中NOT EXISTS子句的Spark SQL配置单元错误

以下“不存在”查询在配置单元提示符中正常运行: 从不存在的过渡t中选择a、b、c、d,从xyz\n ABC中选择a,其中a=a、b=b、c=c

但同样的程序在spark执行的查询中提供了错误不支持的语言特性

from pyspark import SparkContext
sc =SparkContext()


from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)

#sqlContext.sql("INSERT INTO abc_p PARTITION (SRVC_TYPE_CD='1') SELECT a,b,c,d FROM interim_t WHERE NOT EXISTS (SELECT a FROM xyz_n ABC where (a=a) AND (b=b) AND (c=c)")
执行:

spark-submit --verbose --deploy-mode client /data/abc.py
错误消息:

查询中不支持的语言功能:插入abc\u p分区 SRVC_TYPE_CD='1'从不存在的临时文件中选择a、b、c、d 从xyz_n ABC中选择a,其中a=a,b=b,c=c


我认为sqlContext.sql不支持配置单元中不存在的查询。您能推荐一些解决方案/替代方案吗。

我在pyspark shell上进行了以下尝试,执行得很好,没有错误

from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)

sqlContext.sql("SELECT a,b,c,d FROM table1 i WHERE  NOT EXISTS  (SELECT a FROM table2 x where i.a=x.a AND i.b=x.b AND i.c=x.c)");
我在test.py中有以下内容

from pyspark import SparkContext
sc =SparkContext()

from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)

sqlContext.sql("SELECT a,b,c,d FROM table1 i WHERE  NOT EXISTS  (SELECT a FROM table2 x where i.a=x.a AND i.b=x.b AND i.c=x.c)");
执行脚本

spark-submit --verbose --deploy-mode client test.py
执行成功。你能试试吗

我的设置蜂窝2.1.0和Spark 2.0.2


我怀疑你的蜂巢版本就是问题所在

我也遇到过同样的问题,下面的解决方案对我有效。将这些行放入文件并测试:-

from pyspark import SparkContext
sc =SparkContext()
from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)

df = sqlContext.sql("SELECT a,b,c,d FROM interim_t WHERE NOT EXISTS (SELECT a FROM xyz_n ABC where (a=a) AND (b=b) AND (c=c)")
df.write.mode("overwrite").partitionBy("SRVC_TYPE_CD").saveAsTable("abc_p")

除此之外,您还可以尝试更多的选项,如模式可以附加。您也可以选择保存格式。比如摩德XXX,拼花地板。格式可以是拼花地板、orc等。

是的,可能是蜂巢版和Spark版的问题。我使用的是平台:cdh5.6.0 Hive版本:Hive 1.1.0 Spark版本:1.6。对我来说,当我在配置单元提示符上执行查询时,它也在工作,但在spark程序中它给出了错误。是,请尝试升级配置单元版本并尝试一下。我对sql做了一些更改,上面的代码应该可以工作感谢您的回答,但对于平台:cdh5.6.0配置单元版本:配置单元1.1.0,错误与pyspark.sql.utils.AnalysisException相同:查询中不支持的语言功能:不支持不存在。
from pyspark import SparkContext
sc =SparkContext()
from pyspark.sql import HiveContext
sqlContext = HiveContext(sc)

df = sqlContext.sql("SELECT a,b,c,d FROM interim_t WHERE NOT EXISTS (SELECT a FROM xyz_n ABC where (a=a) AND (b=b) AND (c=c)")
df.write.mode("overwrite").partitionBy("SRVC_TYPE_CD").saveAsTable("abc_p")