Среднее значение по строкам уникальных элементов в столбце ArrayType Pyspark - PullRequest
1 голос
/ 17 июня 2020

У меня есть большой фрейм данных pyspark (23M строк) со следующим форматом:

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

Я хотел бы вычислить среднее настроение для каждого уникального имени в столбце names , в результате:

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

Ответы [ 2 ]

1 голос
/ 18 июня 2020

Просто взорвите массив, а затем сгруппируйте

Эквивалент 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()

1 голос
/ 17 июня 2020
   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           |
  //      +-----+--------------+
...