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

yeotifhr  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(478)

sql查询中not exists子句的spark sql配置单元错误。

Platform : cdh5.6.0

Hive version: Hive 1.1.0

下面的not exists查询在配置单元提示中运行正常:从不存在的临时位置选择a、b、c、d(从xyz\n 中选择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

错误消息:
查询中不支持的语言功能:insert into 分区(srvc\u type\u cd='1')从不存在的临时分区中选择a、b、c、d(从xyz\n 中选择a,其中(a=a)和(b=b)以及(c=c))
我认为sqlcontext.sql不支持不存在于配置单元查询中。你能提出一些解决方案/替代方案吗。

mctunoxg

mctunoxg1#

我在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
我怀疑你的Hive版本是问题所在

iih3973s

iih3973s2#

我也有同样的问题,下面的解决方案对我有效。把这些行放到你的文件里test:-

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")

除此之外,你可以尝试更多的选择,如 mode 可以是 append . 您也可以选择保存格式。就像 mode("").format("parquet") . 格式可以是 parquet, orc 等。

相关问题