我在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文档中看到:
注意当未定义排序时,默认情况下使用无边界窗口框架(rowFrame,unboundedPreceding,unboundedFollowing)。定义排序时,默认情况下使用增长的窗口框架(rangeFrame,unboundedPreceding,currentRow)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句