apache-spark - ArrayType Pyspark 列中唯一元素行的平均值
问题描述
我有一个大的 pyspark 数据框(23M 行),格式如下:
names, sentiment
["Lily","Kerry","Mona"], 10
["Kerry", "Mona"], 2
["Mona"], 0
我想计算名称列中每个唯一名称的平均情绪,结果为:
name, sentiment
"Lily", 10
"Kerry", 6
"Mona", 4
解决方案
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 |
// +-----+--------------+
推荐阅读
- c++ - 同时处理2条消息
- vue.js - Vue中的CKEditor 4 - 如何防止断字?
- python - 在 Shapely/python 中合并关闭相似的线串
- firebase - 如何在不使用 Flutter 中的 FutureBuilder 或 StreamBuilder 的情况下从 Firebase 获取单个数据
- r - R中的Python f-string等价物?
- java - 尝试将“97”解析为int时使用整数变量时如何修复NumberFormatException错误?
- spring-boot - SpringBoot 应用程序中没有可用的“java.util.UUID”类型的限定 bean
- javascript - 如何在顶点图表中减少折线图的线条粗细
- azure - Azure LogicApp GetRows 操作将只有方括号值不同的相同列标题转换为数字
- sql - 如何从表中的多个 ID 中获取特定名称?