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
相关产品推荐
相关产品推荐

