我想对非数字字段进行一些汇总,例如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/

10-12 20:10