DataFrame减少

时间:2018-07-30 16:42:22

标签: pyspark apache-spark-sql

需要帮助...通过键将多行转换为单行。分组建议表示赞赏。使用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|
+----+----+------+-------+

1 个答案:

答案 0 :(得分:1)

Key1Key2分组,并从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|
+----+----+------+-------+