多 列 的 PySpark 最 大 值

dddzy1tm  于 2022-11-01  发布在  Spark
关注(0)|答案(1)|浏览(133)

我有下表:

df = spark.createDataFrame(
    [('a', 1, 11, 44),
     ('b', 2, 21, 33),
     ('a', 2, 10, 40),
     ('c', 5, 55, 45),
     ('b', 4, 22, 35),
     ('a', 3,  9, 45)],
    ['id', 'left', 'right', 'centre'])

我需要查找并仅显示最大值,如下所示:
[![在此处输入图像说明][2]][2]
[[2][3][4][5][6][7][8][9][10][11][12][13][14][15]

6pp0gazn

6pp0gazn1#

简单的groupByagg

from pyspark.sql import functions as F
df = df.groupBy('id').agg(
    F.max('left').alias('max_left'),
    F.max('right').alias('max_right'),
    F.max('centre').alias('max_centre'),
)
df.show()

# +---+--------+---------+----------+

# | id|max_left|max_right|max_centre|

# +---+--------+---------+----------+

# |  b|       4|       22|        35|

# |  a|       3|       11|        45|

# |  c|       5|       55|        45|

# +---+--------+---------+----------+

或者稍微高级一点:

df = df.groupBy('id').agg(
    *[F.max(c).alias(f'max_{c}') for c in df.columns if c != 'id']
)

相关问题