首页 > 解决方案 > ArrayType Pyspark 列中唯一元素行的平均值

问题描述

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

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

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

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

标签: apache-sparkpysparkapache-spark-sqluser-defined-functions

解决方案


   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           |
  //      +-----+--------------+

推荐阅读