pyspark - 数据帧减少
问题描述
需要帮助...按键将多行转换为单行。按建议分组表示赞赏。使用 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|
+----+----+------+-------+
解决方案
Key1
按和分组,并从和Key2
中取最大值:Name
Address
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|
+----+----+------+-------+
推荐阅读
- c# - c#反射,如何获取泛型类型类属性
- javascript - 使用 getter 和方法返回对象的函数
- java - Jenkins 上的 Sonarscanner:在 JAVA_HOME 或 PATH 中找不到“java”可执行文件
- python - Python:用斜杠替换反斜杠
- python - 了解散列技巧结果
- javascript - npm install(在预安装时优雅地停止进程)
- ssl - 如何禁止使用低版本 ssl 的请求?
- postgresql - 在 Pyspark 中填充一个空的 postgres 数据库
- pandas - 使用滞后值的 Pandas 变量
- c - 如何在 C 中的“if”中打印一个字符