23.
SparkSQL - The correlated scalar subquery can only contain equality predicates
写spark Sql时,用到了嵌套select查询,但sql解析报错,究其原因,和spark本身sql解析机制有关,解决办法是:
改写原有sql即可。下面给出我的一个demo
##有个需求:填充非交易日股票价格,那么需要找到离非交易日最近的那个交易日股价。
###########
# 报错sql
val wrongDF = ss.sql("""
select a.stock_id, a.code, a.date_id, a.date_value,
(select max(b.date_id)
from stockPriceNotNullDF b
where b.stock_id = a.stock_id and b.date_id < a.date_id
) as oid
from stockPriceNullDF a
group by a.stock_id, a.code, a.date_id, a.date_value
order by a.stock_id, a.date_id
""")
#提示
The correlated scalar subquery can only contain equality predicates
###################
# 改写之后的sql,放弃使用子查询方式
val rightDF = ss.sql("""
select a.stock_id, a.code, a.date_id, a.date_value,
max(b.date_id) as oid
from stockPriceNullDF a, stockPriceNotNullDF b
where b.stock_id = a.stock_id and b.date_id < a.date_id
group by a.stock_id, a.code, a.date_id, a.date_value
order by a.stock_id, a.date_id
""")
此贴来自汇总贴的子问题,只是为了方便查询。
总贴请看置顶帖:
pyspark及Spark报错问题汇总及某些函数用法。
https://blog.csdn.net/qq0719/article/details/86003435