我在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。请让我知道如何缓解这个问题。
我对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
短语,但不是您提供的确切查询。