首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Spark相关列在谓词中是不允许的

Spark相关列在谓词中是不允许的
EN

Stack Overflow用户
提问于 2022-09-16 18:27:10
回答 1查看 116关注 0票数 1

我必须在Spark中连接两个表,这样第一个表中的列的值就在第二个表中列的范围之内。两个表之间没有联接列,因此我不能使用普通的join SQL。我使用以下查询:

代码语言:javascript
运行
复制
select t.*, (select MAX(p.grade) from table1 p where 
p.marks_lower_bound <= ROUND(t.marks) and 
p.marks_upper_bound >= ROUND(t.marks)) from table2 t;

因此,根据table2中的分数,我希望找到存储在table1中的带有分数范围的等级。我收到以下错误:

代码语言:javascript
运行
复制
AnalysisException: Correlated column is not allowed in predicate

知道如何解决这是Spark吗?我已经在MySQL中尝试过这个查询,它在那里运行得很好,但是在Spark中失败了。请注意,table1table2是从其他Spark创建的临时表。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-09-21 06:06:38

非相等谓词->火花-36114不允许相关列。

不过,您可以使用“普通”联接。请注意,您不能在*中使用group by,因此需要显式地提供列列表。或者您根本不需要分组(如果范围不重叠)。

代码语言:javascript
运行
复制
select t.col1, t.col2, max(p.grade)
  from table2 t
  left join table1 p on (p.marks_lower_bound <= round(t.marks)
                     and p.marks_upper_bound >= round(t.marks))
 group by t.col1, t.col2;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73748955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档