运行相关子查询时出现spark sql错误

问题描述 投票:1回答:1

我在Intellij Maven IDE中运行spark SQL查询,

SELECT seq_no, 
       amount, 
       (select max(b.amount) 
        from premium b 
        where b.seq_no < a.seq_no) last_high_prem
FROM premium a

得到以下错误,

线程“main”中的异常org.apache.spark.sql.AnalysisException:相关标量子查询只能包含等式谓词:(seq_no#11#32 <seq_no#11);

我理解使用相等运算符时的相关查询然后只能在spark SQL中使用。有没有办法克服这个问题。

我知道我们可以做hiveql。但是需要在我的本地机器中设置hadoop和hive。请让我知道如何缓解这个问题。

sql apache-spark apache-spark-sql correlated-subquery
1个回答
2
投票

我对Spark SQL几乎一无所知,但在我看来,你的问题在于相关的子查询,在大多数品牌的SQL中这个查询都不是必需的。 Spark确实接受max函数作为Window Function

你可以做:

SELECT seq_no, 
       amount, 
       max(amount) OVER (ORDER BY seq_no ROWS BETWEEN UNBOUNDED PRECEDING and 1 PRECEDING) AS last_high_prem
FROM premium 

注意:您可能还需要一个partition by短语,但不是您提供的确切查询。

© www.soinside.com 2019 - 2024. All rights reserved.