pyspark 无法访问要筛选的Spark Sql列

xxb16uws  于 2023-04-19  发布在  Spark
关注(0)|答案(2)|浏览(97)

我想知道为什么当我添加最后一个过滤器时,这个SQL语句不起作用:

where filter_col = True

并执行错误,如:
分析异常:无法解析给定输入列的“filter_col”:[a.cnt_tiers,a.date,a.etat,a.max_date,a.pays,a.poid,a.tiers,a.zyada];线13位置32;我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择,我们的服务项目是一个非常好的选择。

dfsql = spark.sql(""" select a.tiers , a.poid, a.etat, a.pays , a.zyada, a.date , a.max_date ,a.cnt_tiers,
                     CASE
                          WHEN a.cnt_tiers  = 1 THEN True
                          WHEN a.cnt_tiers  > 1  and a.date =a.max_date THEN True 
                          ELSE False 
                      END AS filter_col    

                      from (select *,  MAX(date) OVER (PARTITION BY tiers) AS max_date , COUNT(*) OVER (PARTITION BY tiers) as cnt_tiers
                          
                          from tierstbl 
                          where poid is not null and   etat is not null  and  pays  is not null and zyada  is not null )  a 

                          where filter_col = True
                        
                          
    
  """)
vc9ivgsu

vc9ivgsu1#

或者,可以在where子句中包含计算结果为true的逻辑。

where
poid is not null
...
AND ((cnt_tiers  = 1 ) OR (a.cnt_tiers  > 1  and a.date =a.max_date))
ltskdhd1

ltskdhd12#

内表(a)中没有filter_col列,只有cnt_tiers列。如果需要基于filter_col进行过滤,则需要在外部嵌套另一层select,或者在内表时使用case直接构造filter_col列,而不是cnt_tiers列。

相关问题