首页 > 解决方案 > 数据帧减少

问题描述

需要帮助...按键将多行转换为单行。按建议分组表示赞赏。使用 pyspark 版本:2

l = (1,1,'', 'add1'  ),
    (1,1,'name1', ''),
    (1,2,'', 'add2'),
    (1,2,'name2', ''),
    (2,1,'', 'add21'),
    (2,1,'name21', ''),
    (2,2,'', 'add22'),
    (2,2,'name22', '')

df = sqlContext.createDataFrame(l, ['Key1', 'Key2','Name', 'Address'])
df.show()
+----+----+------+-------+
|Key1|Key2|  Name|Address|
+----+----+------+-------+
|   1|   1|      |   add1|
|   1|   1| name1|       |
|   1|   2|      |   add2|
|   1|   2| name2|       |
|   2|   1|      |  add21|
|   2|   1|name21|       |
|   2|   2|      |  add22|
|   2|   2|name22|       |
+----+----+------+-------+

我一直在寻找类似的输出

+----+----+------+-------+
|Key1|Key2|  Name|Address|
+----+----+------+-------+
|   1|   1| name1 |   add1|
|   1|   2| name2 |   add2|
|   2|   1| name21|  add21|
|   2|   2| name22|  add22|
+----+----+------+-------+

标签: pysparkapache-spark-sql

解决方案


Key1按和分组,并从和Key2中取最大值:NameAddress

import pyspark.sql.functions as F

df.groupBy(['Key1', 'Key2']).agg(
    F.max(df.Name).alias('Name'), 
    F.max(df.Address).alias('Address')
).show()
+----+----+------+-------+
|Key1|Key2|  Name|Address|
+----+----+------+-------+
|   1|   1| name1|   add1|
|   2|   2|name22|  add22|
|   1|   2| name2|   add2|
|   2|   1|name21|  add21|
+----+----+------+-------+

推荐阅读