我想将AgroupBy
和后续agg
函数应用于PySpark DataFrame,但仅应用于特定窗口。一个例子可以最好地说明这一点。假设我有一个名为的数据集df
:
df.show()
+-----+----------+----------+-------+
| ID| Timestamp| Condition| Value|
+-----+----------+----------+-------+
| z1| 1| 0| 50|
|-------------------------------------------|
| | z1| 2| 0| 51| |
| | z1| 3| 0| 52| |
| | z1| 4| 0| 51| |
| | z1| 5| 1| 51| |
| | z1| 6| 0| 49| |
| | z1| 7| 0| 44| |
| | z1| 8| 0| 46| |
|-------------------------------------------|
| z1| 9| 0| 48|
| z1| 10| 0| 42|
+-----+----------+----------+-------+
特别是,我想做的是对列所在的行Condition == 1
(即本例中的第5行)应用一种+/- 3行的窗口。如上面的DataFrame所示,在该窗口内,我想找到column的最小值和columnValue
的相应值Timestamp
,从而获得:
+----------+----------+
| Min_value| Timestamp|
+----------+----------+
| 44| 7|
+----------+----------+
有谁知道该如何解决?
提前谢谢了
马里奥安萨斯
您可以使用跨越前3行和后3行的窗口,获取最小值并过滤条件:
from pyspark.sql import functions as F, Window
df2 = df.withColumn(
'min',
F.min(
F.struct('Value', 'Timestamp')
).over(Window.partitionBy('ID').orderBy('Timestamp').rowsBetween(-3,3))
).filter('Condition = 1').select('min.*')
df2.show()
+-----+---------+
|Value|Timestamp|
+-----+---------+
| 44| 7|
+-----+---------+
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句