Spark窗口函数过滤不符合要求的行
Posted
技术标签:
【中文标题】Spark窗口函数过滤不符合要求的行【英文标题】:Spark window function filtering rows which doesn't match requirement 【发布时间】:2021-02-22 13:53:40 【问题描述】:我想要做的是获得两行窗口的最大值。并删除最后一行,因为它只计算一行。
例如,下面是源数据
seconds | value |
---|---|
225 | 1.5 |
245 | 0.5 |
300 | 2.4 |
319 | 1.2 |
320 | 4.6 |
下表就是我想要的。它下降了 320 秒,因为它是最新的并且只有它自己的。
seconds | max |
---|---|
225 | 1.5 |
245 | 2.4 |
300 | 2.4 |
319 | 4.6 |
【问题讨论】:
【参考方案1】:您可以根据秒数降序分配行号,并使用过滤器删除最后一行:
from pyspark.sql import functions as F, Window
df2 = df.withColumn(
'max',
F.max('value').over(Window.orderBy('seconds').rowsBetween(0, 1))
).withColumn(
'rn',
F.row_number().over(Window.orderBy(F.desc('seconds')))
).filter('rn != 1').drop('rn', 'value')
df2.show()
+-------+---+
|seconds|max|
+-------+---+
| 319|4.6|
| 300|2.4|
| 245|2.4|
| 225|1.5|
+-------+---+
【讨论】:
以上是关于Spark窗口函数过滤不符合要求的行的主要内容,如果未能解决你的问题,请参考以下文章