【问题标题】:How to find the distribution of a column in PySpark dataframe for all the unique values present in that column?如何在 PySpark 数据框中为该列中存在的所有唯一值查找列的分布?
【发布时间】:2020-12-17 18:27:08
【问题描述】:

我有一个 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|
+-------+------+

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

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

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

我如何做到这一点?

【问题讨论】:

    标签: python-3.x pyspark apache-spark-sql pyspark-dataframes


    【解决方案1】:

    这是一个简单的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|
    +--------+--------+--------+--------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 2019-05-14
      相关资源
      最近更新 更多