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

如何统计Spark DataFrame数组列中各元素的出现频次

Spark 数组类型字段元素频次统计解决方案

报错核心原因:你的list字段本身已经是array<string>类型,split函数仅支持传入字符串类型参数做分隔拆分,对数组类型调用自然会触发类型不匹配异常,直接去掉split相关逻辑即可。


修正后的完整实现

1. 单个数组长度统计(对应你原有count_df逻辑)

import pyspark.sql.functions as F

# 直接调用size获取数组长度即可,无需拆分
count_df = df.withColumn('count', F.size('list'))
count_df.show(truncate=False)

2. 全量元素频次统计

两种写法可选:

PySpark DSL 写法

freq_df = df.select(F.explode('list').alias('element')) \
            .groupBy('element') \
            .agg(F.count('*').alias('count'))
freq_df.show(truncate=False)

Spark SQL 写法

df.createOrReplaceTempView('tmp')
freq_sql = """
    SELECT element AS list, COUNT(*) AS count
    FROM (SELECT EXPLODE(list) AS element FROM tmp)
    GROUP BY element
"""
freq_df = spark.sql(freq_sql)
freq_df.show(truncate=False)

输出结果示例

对应你给出的测试数据,最终统计结果如下:

listcount
14
23
apple2
orange1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:57:02