首页 > 解决方案 > 如何在 PySpark 数据框中为该列中存在的所有唯一值查找列的分布?

问题描述

我有一个 PySpark 数据框-

df = spark.createDataFrame([
    ("u1", 0),
    ("u2", 0),
    ("u3", 1),
    ("u4", 2),
    ("u5", 3),
    ("u6", 2),],
    ['user_id', 'medals'])

df.show()

输出-

+-------+------+
|user_id|medals|
+-------+------+
|     u1|     0|
|     u2|     0|
|     u3|     1|
|     u4|     2|
|     u5|     3|
|     u6|     2|
+-------+------+

我想为所有用户获取奖牌列的分布。因此,如果奖牌列中有 n 个唯一值,我希望输出数据框中的 n 列具有相应数量的获得那么多奖牌的用户。

上面给出的数据的输出应该看起来像 -

+------- +--------+--------+--------+
|medals_0|medals_1|medals_2|medals_3|
+--------+--------+--------+--------+
|       2|       1|       2|       1|
+--------+--------+--------+--------+

我如何实现这一目标?

标签: python-3.xpysparkapache-spark-sqlpyspark-dataframes

解决方案


这很简单pivot

df.groupBy().pivot("medals").count().show()

+---+---+---+---+
|  0|  1|  2|  3|
+---+---+---+---+
|  2|  1|  2|  1|
+---+---+---+---+

如果您需要一些化妆品来在列名称中添加单词奖牌,那么您可以这样做:

medals_df = df.groupBy().pivot("medals").count()

for col in medals_df.columns:
    medals_df = medals_df.withColumnRenamed(col, "medals_{}".format(col))

medals_df.show()

+--------+--------+--------+--------+
|medals_0|medals_1|medals_2|medals_3|
+--------+--------+--------+--------+
|       2|       1|       2|       1|
+--------+--------+--------+--------+

推荐阅读