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

PySpark DataFrame逗号分隔列表元素计数与频次统计实现

PySpark实现字符串拆分统计需求方案

前置依赖

首先导入需要用到的PySpark内置函数:

from pyspark.sql.functions import split, size, explode, count

你给出的初始DataFrame生成代码如下:

df = spark.sql("""
SELECT list
FROM categories
""")
df.show()

需求1:新增count字段统计每行元素总个数

实现思路:先用split函数按逗号把字符串拆分为数组,再用size函数直接获取数组长度,就是该行的元素个数。
实现代码:

# 新增count字段
df_with_row_count = df.withColumn("count", size(split("list", ",")))
# 查看结果
df_with_row_count.show(truncate=False)

输出结果和预期一致:

+---------------------+-----+
|list                 |count|
+---------------------+-----+
|1,1,1,2,2,apple      |6    |
|apple,orange,1,2     |4    |
+---------------------+-----+

需求2:统计所有元素的全局出现频次

实现思路:先把每行拆分后的数组用explode函数炸成一行一个元素,再按元素分组统计总数即可。
实现代码:

# 拆分并炸开所有元素
df_explode = df.withColumn("element", explode(split("list", ",")))
# 分组统计频次
frequency_df = df_explode.groupBy("element") \
                         .agg(count("*").alias("frequency_count")) \
                         .withColumnRenamed("element", "list") \
                         .orderBy("frequency_count", ascending=False) # 可选:按频次倒序排序
# 查看结果
frequency_df.show()

输出结果和预期一致:

+------+---------------+
|  list|frequency_count|
+------+---------------+
|     1|              4|
|     2|              3|
| apple|              2|
|orange|              1|
+------+---------------+

内容的提问来源于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 11:24:07