我想对非数字字段进行一些汇总,例如collect_list,然后根据不同的列转置为多个列。
这是一个简单的数据集,也是我想要的结果。
df = sqlContext.createDataFrame([
("John", 'Male', 'GA'),
("Mary", "Female", 'GA'),
("Alex", "Male", "NY"),
("Ana", "Female", "NY"),
("Amy", "Female", "NY")
], ["Name", "gender", "state"])
我可以按以下两个字段分组。
(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']
最佳答案
您可以在pivot()
之后使用groupby
转置。 Spark还具有collect_list()
聚合。
df.groupBy('state').pivot('gender').agg(F.collect_list('Name')).show()
# +-----+----------+------+
# |state| Female| Male|
# +-----+----------+------+
# | NY|[Ana, Amy]|[Alex]|
# | GA| [Mary]|[John]|
# +-----+----------+------+
关于python - 如何在PySpark中进行聚合和转置?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59004531/