运行相关子查询时出现火花SQL错误

时间:2018-09-10 10:46:07

标签: sql apache-spark apache-spark-sql correlated-subquery

我正在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

我了解使用相等运算符时的相关查询,然后仅在Spark SQL中当前有效。有什么方法可以解决这个问题。

我知道我们可以做到这一点。但是需要在我的本地计算机上设置hadoop和hive。 请让我知道如何缓解该问题。

1 个答案:

答案 0 :(得分: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短语,而不是您所提出的确切查询。