python - 如何在 PySpark 中进行聚合和转置?

标签 python pyspark

我想对非数字字段进行一些聚合,例如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']

最佳答案

您可以使用 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/

相关文章:

postgresql - 如何使用 JDBC 将 (Py)Spark 连接到 Postgres 数据库

python - 如何在 PySpark 数据框中添加变量/条件列

python - 从 Python 的角度学习 Perl

python - 如何细化目录列表以删除新添加目录的子目录

python - 在 Kivy 中创建一条动态绘制的线

apache-spark - 将数据帧保存到表 - Pyspark 中的性能

python - 如何强制 virtualenv 从 pypi 安装最新的 setuptools 和 pip?

python - NumPy:第三维非零的索引(图像掩蔽)

python - pyspark 为自定义模块返回一个名为 no module 的错误

pyspark - pyspark 数据帧上的复杂逻辑,包括前一行现有值以及动态生成的前一行值