【发布时间】:2018-09-06 07:57:21
【问题描述】:
对于 PySpark DataFrame 中的每一行,我都试图从满足特定条件的第一行中获取一个值:
如果我的数据框看起来像这样:
X | Flag
1 | 1
2 | 0
3 | 0
4 | 0
5 | 1
6 | 0
7 | 0
8 | 0
9 | 1
10 | 0
我想要如下所示的输出:
X | Lag_X | Flag
1 | NULL | 1
2 | 1 | 0
3 | 1 | 0
4 | 1 | 0
5 | 1 | 1
6 | 5 | 0
7 | 5 | 0
8 | 5 | 0
9 | 5 | 1
10 | 9 | 0
我认为我可以使用延迟函数和 WindowSpec 来做到这一点,不幸的是 WindowSpec 不支持 .filter 或 .when,所以这不起作用:
conditional_window = Window().orderBy(X).filter(df[Flag] == 1)
df = df.withColumn('lag_x', f.lag(df[x],1).over(conditional_window)
看起来这应该很简单,但我一直在绞尽脑汁试图找到解决方案,因此非常感谢您提供任何帮助
【问题讨论】:
标签: python pyspark spark-dataframe pyspark-sql