在pyspark中找到具有多列的数据框中的最大值

finding the max in a dataframe with multiple columns in pyspark

拜托,我需要帮助 我是 pyspark 的新手,我遇到了这个问题 我有一个包含 4 列的数据框

A B C D
O1 2 E1 2
O1 3 E1 1
O1 2 E1 0
O1 5 E2 2
O1 2 E2 3
O1 2 E2 2
O1 5 E2 1
O2 8 E1 2
O2 8 E1 0
O2 0 E1 1
O2 2 E1 4
O2 9 E1 2
O2 2 E2 1
O2 9 E2 4
O2 2 E2 2

我想要这个(每对 (A,C) 夫妇的最大 D):

A B C D
O1 2 E1 2
O1 2 E2 3
O2 2 E1 4
O2 9 E2 4

我试过了

table.groupby("A","C").agg(round(max("D")))

它确实有效,因为缺少 B 列

为什么不使用 partition by 而不是 group by,这样您就可以保留所有列。您将保留所有记录。 编辑添加 - 如果您想要 A、C 的不同值 - 只需获取您想要的列并获取唯一值。

import pyspark.sql.functions as F
from pyspark.sql.window import Window
table1 = table.withColumn("max_D",F.round(F.max('D').over (Window.partitionBy('A','C'))))
table1.select('A','B','C','max_D').distinct().show()

您需要将 max 与一对 DB 一起应用,这样您就不会在聚合时丢失 B

from pyspark.sql import functions as F

(df
    .groupBy('a', 'c')
    .agg(F.max(F.array('d', 'b')).alias('max_d'))
    .select(
        F.col('a'),
        F.col('c'),
        F.col('max_d')[1].alias('b'),
        F.col('max_d')[0].alias('d'),
    )
    .show()
)

+---+---+---+---+
|  a|  c|  b|  d|
+---+---+---+---+
| O1| E1|  2|  2|
| O1| E2|  2|  3|
| O2| E1|  2|  4|
| O2| E2|  9|  4|
+---+---+---+---+