Apache spark 在pyspark中获取窗口的最大值

Apache spark 在pyspark中获取窗口的最大值,apache-spark,pyspark,apache-spark-sql,pyspark-dataframes,Apache Spark,Pyspark,Apache Spark Sql,Pyspark Dataframes,我在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)) te

我在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.unbounddpreceiding,window.currentRow
。因此,您可以定义另一个窗口,在其中删除订单(因为max函数不需要它):

您可以在PySpark中看到:

注意:未定义排序时,默认情况下使用无界窗框(rowFrame、UnbounddReceiding、unboundedFollowing)。定义排序时,默认情况下使用增长窗口帧(rangeFrame、UnbounddReceiding、currentRow)

w2 = Window.partitionBy('grp')