[英]How to select rows based on a condition for a common value of a specific column?
对不起,标题混乱,我不知道如何清楚地表达出来。
这就是我想要使用 PySpark SQL 完成的工作:
当变量“Z”的值介于 2000 和 3000 之间时,返回该特定 ID 的行,但仅返回变量 Y 和 Z 的数据。
我不知道如何 go 比下面的查询更进一步,如何让 SQL 知道我们需要在附加的 df 中选择正确的 ID(2 和 3)?
SELECT ID, Variable, Date, Value
FROM TABLE
WHERE (Variable == 'Y' OR Variable == 'Z') AND "if Value of Z between 2000 and 3000 then select only these IDs"
尝试使用简单的内部查询
SELECT ID, Variable, Date, Value
FROM TABLE
WHERE (Variable == 'Y' OR Variable == 'Z') AND ID in (select id from TABLE where variable = 'Z' and value between 2000 and 3000)
在 Spark 中,我建议使用 window 函数:
select t.*
from (select t.*,
sum(case when variable = 'Z' and z_value between 2000 and 3000 then 1 else 0 end) over (partition by id) as z_value_cnt
from t
) t
where variable in ('Y', 'Z') and z_value_cnt >= 1;
我希望这会有更好的执行计划。
df=spark.createDataFrame([(1,'X', '01/01/20',5),
(1,'Y', '01/01/20',10),
(1,'Z', '01/01/20',1000),
(2,'X', '01/02/20',20),
(2,'Y', '01/02/20',30),
(2,'Z', '01/02/20',2500)],['ID','VAR','DATE','VAL'])
display(df.filter("VAL Between 2000 and 3000").select('ID').join(df,['ID']).filter("VAR in ('X','Y')"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.