apache-spark - 在pyspark中获取窗口上的最大值
问题描述
我在 pyspark 中的特定窗口上获得最大值。但是从该方法返回的不是预期的。
这是我的代码:
test = spark.createDataFrame(DataFrame({'grp': ['a', 'a', 'b', 'b'], 'val': [2, 3, 3, 4]}))
win = Window.partitionBy('grp').orderBy('val')
test = test.withColumn('row_number', F.row_number().over(win))
test = test.withColumn('max_row_number', F.max('row_number').over(win))
display(test)
输出是:
我预计它会为“a”组和“b”组返回 2,但事实并非如此。
有人对这个问题有想法吗?非常感谢!
解决方案
这里的问题在于函数的框架max
。如果您在做框架时订购窗口Window.unboundedPreceding, Window.currentRow
。因此,您可以定义另一个窗口来放置订单(因为 max 函数不需要它):
w2 = Window.partitionBy('grp')
您可以在 PySpark文档中看到:
注意 未定义 ordering 时,默认使用无界窗口框架(rowFrame、unboundedPreceding、unboundedFollowing)。定义排序时,默认使用增长的窗口框架(rangeFrame、unboundedPreceding、currentRow)。
推荐阅读
- powershell - Powershell - 从 Powershell 远程会话转发事件 - 行为不一致
- appcelerator - Appcelerator Studio 接受 SDK 许可协议,但全部接受
- google-cloud-platform - 将配置单元分区的 ORC 数据加载到 bigquery
- javascript - 执行超时(12000 毫秒):如何通过此错误
- r - 在 R 中安装“systemfit”包时出现问题
- android - 如何在android TextView中水平和垂直居中html文本
- c# - 如何解决窗口服务问题
- php - Google chrome 版本 84.0.4147.125(官方构建)(64 位)在重定向来自第三方的回调函数时破坏应用程序会话
- angular - 无法更改工具提示的自定义位置,而不是其默认位置在剑道中的顶部、左侧、右侧、底部 - Angular
- php - 在 Codeigniter 中选择包含逗号和引号的列