pyspark 如何根据数据框中1列的唯一值聚合其他列

n3h0vuf2  于 2022-12-17  发布在  Spark
关注(0)|答案(1)|浏览(96)

我有这样一个表,我想找到唯一的Name并聚合Value1的值(最小值)和Value2的值(最大值)。这意味着对于每个唯一的Name,我想获得该名称的值1的最小值和值2的最大值
输入:
| 姓名|数值1|数值2|
| - ------|- ------|- ------|
| 约翰|1个|第二章|
| 约翰|三个|四个|
| 玛丽|第二章|1个|
| 玛丽|四个|三个|
| 彼得|三个|六个|
输出:
| 姓名|数值1|数值2|
| - ------|- ------|- ------|
| 约翰|1个|四个|
| 玛丽|第二章|三个|
| 彼得|三个|六个|
我发现可以使用df.select('Name ').distinct().collect()获得 Dataframe 的唯一列
但我的问题是,在得到Name的唯一值之后,如何聚合其他列的最小值/最大值?

vc6uscn9

vc6uscn91#

使用groupBy并按最小值和最大值聚合:

import pyspark.sql.functions as F

df = spark.createDataFrame(data=[["John",1,2],["John",3,4],["Mary",2,1],["Mary",4,3],["Peter",3,6]], schema=["Name","Value1","Value2"])

df = df.groupBy("Name") \
      .agg( \
          F.min("Value1").alias("Value1"), \
          F.max("Value2").alias("Value2") \
      )

输出:

+-----+------+------+
|Name |Value1|Value2|
+-----+------+------+
|Mary |2     |3     |
|John |1     |4     |
|Peter|3     |6     |
+-----+------+------+

相关问题