如何统计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)
输出结果示例
对应你给出的测试数据,最终统计结果如下:
| list | count |
|---|---|
| 1 | 4 |
| 2 | 3 |
| apple | 2 |
| orange | 1 |
内容的提问来源于stack exchange,提问作者jus
相关产品推荐
相关产品推荐

