如何统计PySpark DataFrame列表列的元素出现频率并按次数降序排序
实现方案
核心实现逻辑为拆分数组元素、分组统计频次、按频次降序排序,最后按要求格式化输出即可,完整实现代码如下:
from pyspark.sql.functions import explode, col, count, concat, lit # 把My_list列的数组元素拆分成一行单个元素 exploded_df = df2.select(explode(col("My_list")).alias("item")) # 分组统计每个元素的出现次数,按次数降序排序 count_df = exploded_df.groupBy("item") \ .agg(count("*").alias("occur_cnt")) \ .orderBy(col("occur_cnt").desc()) # 按要求格式拼接输出字符串 format_result = count_df.select( concat(lit("'"), col("item"), lit("' 出现 -> "), col("occur_cnt"), lit("次,")) .alias("output_str") ) # 打印最终结果 for row in format_result.collect(): print(row["output_str"])
运行后输出结果如下:
'B z' 出现 -> 3次,
'D' 出现 -> 3次,
'B' 出现 -> 3次,
'A x' 出现 -> 2次,
'C q' 出现 -> 2次,
'E' 出现 -> 2次,
'A y' 出现 -> 2次,
'R' 出现 -> 2次,
'F' 出现 -> 2次,
'C' 出现 -> 1次,
'K' 出现 -> 1次,
'X' 出现 -> 1次,
'A' 出现 -> 1次,
内容的提问来源于stack exchange,提问作者Droid-Bird
相关产品推荐
相关产品推荐

