【发布时间】:2019-11-25 13:14:45
【问题描述】:
我想对非数字字段进行一些聚合,例如 collect_list,然后根据不同的列转置到多个列。
这是一个简单的数据集和我想要的结果。
df = sqlContext.createDataFrame([
("John", 'Male', 'GA'),
("Mary", "Female", 'GA'),
("Alex", "Male", "NY"),
("Ana", "Female", "NY"),
("Amy", "Female", "NY")
], ["Name", "gender", "state"])
我可以按以下 2 个字段分组。
(df
.groupBy('state', 'gender')
.agg(collect_list('Name'))
).show()
+-----+------+------------------+
|state|gender|collect_list(Name)|
+-----+------+------------------+
| NY| Male| [Alex]|
| GA| Male| [John]|
| GA|Female| [Mary]|
| NY|Female| [Ana, Amy]|
+-----+------+------------------+
如何根据性别字段将其转置为两个字段?这就是我要找的东西。
state | male | female
--------------------------
GA | ['John'] | ['Mary']
NY | ['Alex'] | ['Ana', 'Amy']
【问题讨论】:
-
df.groupBy('state').pivot('gender').agg(collect_list('Name')).show()