SparkSQL是否支持子查询



我在Spark shell中运行这个查询,但它给了我错误,

sqlContext.sql(
 "select sal from samplecsv where sal < (select MAX(sal) from samplecsv)"
).collect().foreach(println)

错误:

java.lang.RuntimeException:[1.47]失败:应为")",但标识符MAX找到

从samplecsv中选择sal<(从samplecsv中选择MAX(sal))^在scala.sys.package$.error(package.scala:27)有人能解释我吗,谢谢

计划功能

  • SPARK-23945(Column.isi()应接受单列DataFrame作为输入)
  • SPARK-18455(对相关子查询处理的通用支持)

Spark 2.0+

Spark SQL应该同时支持相关和不相关的子查询。详见SubquerySuite。一些例子包括:

select * from l where exists (select * from r where l.a = r.c)
select * from l where not exists (select * from r where l.a = r.c)
select * from l where l.a in (select c from r)
select * from l where a not in (select c from r)

不幸的是,就目前(Spark 2.0)而言,不可能使用DataFrame DSL来表达相同的逻辑。

火花<2.0

Spark支持FROM子句中的子查询(与Hive<=0.12相同)

SELECT col FROM (SELECT *  FROM t1 WHERE bar) t2

它根本不支持WHERE子句中的子查询。一般来说,如果不升级为笛卡尔连接,就无法使用Spark表达任意子查询(尤其是相关子查询)。

由于子查询性能通常是典型关系系统中的一个重要问题,并且每个子查询都可以使用JOIN来表示,因此这里没有功能损失。

https://issues.apache.org/jira/browse/SPARK-4226

存在实现该功能的拉取请求。。我猜它可能会登陆Spark 2.0。

相关内容

  • 没有找到相关文章

最新更新