【问题标题】:Mean across rows of unique elements in ArrayType Pyspark columnArrayType Pyspark 列中唯一元素行的平均值
【发布时间】:2020-06-17 18:41:06
【问题描述】:

我有一个大的 pyspark 数据框(23M 行),格式如下:

names, sentiment
["Lily","Kerry","Mona"], 10
["Kerry", "Mona"], 2
["Mona"], 0

我想计算 names 列中每个唯一名称的平均情绪,结果是:

name, sentiment
"Lily", 10
"Kerry", 6
"Mona", 4

【问题讨论】:

  • 您是否尝试过一种正面的方法来爆炸数组、按名称分组并取平均值?数据框是否太大?
  • 我没有抱歉,实际上效果很好

标签: apache-spark pyspark apache-spark-sql user-defined-functions


【解决方案1】:

简单地分解数组然后分组

Pyspark 等效

import pyspark.sql.functions as f
df1 = df.select(f.explode('names').alias('name'),'sentiment')

df1.groupBy('name').agg(f.avg('sentiment').alias('sentiment')).show()

【讨论】:

    【解决方案2】:
       val avgDF = Seq((Seq("Lily","Kerry","Mona"), 10),
          (Seq("Kerry", "Mona"), 2),
          (Seq("Mona"), 0)
      ).toDF("names", "sentiment")
    
      val avgDF1 = avgDF.withColumn("name", explode('names))
      val avgResultDF = avgDF1.groupBy("name").agg(avg(col("sentiment")))
    
    
      avgResultDF.show(false)
      //      +-----+--------------+
      //      |name |avg(sentiment)|
      //      +-----+--------------+
      //      |Lily |10.0          |
      //      |Kerry|6.0           |
      //      |Mona |4.0           |
      //      +-----+--------------+
    

    【讨论】:

      猜你喜欢
      • 2018-03-09
      • 2019-05-20
      • 2018-12-28
      • 2020-07-12
      • 2013-07-22
      • 1970-01-01
      • 2017-11-08
      • 2021-09-30
      • 2011-11-30
      相关资源
      最近更新 更多