【问题标题】:Tricky Multiple aggregation In pysparkpyspark中的棘手多重聚合
【发布时间】:2018-01-30 16:26:44
【问题描述】:

我有一个三列的表格:

  • 产品名称
  • 产品用例/用法
  • 用户 ID

我想为每个产品提取所有用例。然后对于这些用例中的每一个,使用该产品的用户百分比。以下是数据示例:

product-name  use-case     user-ID
A             therapy        X
B             relaxation     X
C             health         Y
A             relaxation     Z
  1. 我想按产品名称进行分组。
  2. 然后,对于每个产品名称,我想按用例进行分组。
  3. 然后,对于每个用例(与产品名称相关),我想查看用户的百分比(即基于他们的用户 ID)。我想要的结果是说 xx% 的产品 A 的用户正在使用这个产品来放松......

输出应如下所示:

例如,我可以说 50% 的产品 A 用户将其用于治疗,另外 50% 用于放松。

非常感谢。

【问题讨论】:

    标签: python join group-by pyspark aggregate


    【解决方案1】:

    分两步聚合然后加入:

    import pyspark.sql.functions as F
    
    (df.groupBy(['product-name', 'Use-case'])
       .count()
       .withColumnRenamed('count', 'User counts')
       .join(
           df.groupBy('product-name').count(), 
           ['product-name']
       ).withColumn('User counts', F.col('User counts')/F.col('count'))
       .drop('count').show())
    
    +------------+----------+-----------+
    |product-name|  Use-case|User counts|
    +------------+----------+-----------+
    |           B|Relaxation|        1.0|
    |           C|    health|        1.0|
    |           A|   therapy|        0.5|
    |           A|relaxation|        0.5|
    +------------+----------+-----------+
    

    【讨论】:

    • 嗨,如果我想保留用户 ID 列怎么办? Psidom 非常感谢
    • 感谢@Psidom,它对我有用,我希望它可以帮助其他人
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    • 2015-07-11
    相关资源
    最近更新 更多