You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark:如何找出数组列中出现频率最高的前N个值?

找出WrappedArray类型列中元素的最高频率值

假设你使用的是Spark DataFrame,Colour列的数据类型为WrappedArray(Spark中的数组类型),可以通过以下步骤统计所有颜色的出现频率并找出最高值:

步骤说明

  1. 展开数组列:使用explode函数将每个数组中的元素拆分为独立的行,让每个颜色单独占据一行。
  2. 分组统计频率:按拆分后的颜色字段分组,统计每个颜色的出现次数。
  3. 按频率排序:按统计结果降序排列,频率最高的颜色会排在最前面。

Scala 代码示例

import org.apache.spark.sql.functions._
import spark.implicits._

// 创建示例DataFrame
val data = Seq(
  ("A", Array("blue", "yellow")),
  ("B", Array("pink", "yellow")),
  ("C", Array("green", "black")),
  ("D", Array("yellow", "orange", "blue"))
).toDF("Name", "Colour")

// 统计颜色频率并排序
data.select(explode($"Colour").alias("colour"))
  .groupBy("colour")
  .count()
  .orderBy(desc("count"))
  .show()

执行后输出结果:

+-------+-----+
| colour|count|
+-------+-----+
|yellow |    3|
|blue   |    2|
|pink   |    1|
|green  |    1|
|black  |    1|
|orange |    1|
+-------+-----+

Python 代码示例

from pyspark.sql import SparkSession
from pyspark.sql.functions import explode, desc

# 初始化SparkSession
spark = SparkSession.builder.appName("colourFrequency").getOrCreate()

# 创建示例DataFrame
data = [
    ("A", ["blue", "yellow"]),
    ("B", ["pink", "yellow"]),
    ("C", ["green", "black"]),
    ("D", ["yellow", "orange", "blue"])
]
df = spark.createDataFrame(data, ["Name", "Colour"])

# 统计颜色频率并排序
df.select(explode(df.Colour).alias("colour")) \
  .groupBy("colour") \
  .count() \
  .orderBy(desc("count")) \
  .show()

获取最高频率的单个结果

如果只需要得到出现频率最高的颜色,在排序后添加limit(1)即可:

// Scala 示例
data.select(explode($"Colour").alias("colour"))
  .groupBy("colour")
  .count()
  .orderBy(desc("count"))
  .limit(1)
  .show()

输出结果:

+-------+-----+
| colour|count|
+-------+-----+
|yellow |    3|
+-------+-----+

内容的提问来源于stack exchange,提问作者user4046073

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 21:21:01