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

PySpark新手求助:如何按DataFrame列表列中的单个国家分组

解决PySpark按列表列中的单个国家分组统计的问题

嗨,作为PySpark新手碰到这种嵌套列表的分组需求很正常,我来给你一步步拆解解决方案:

核心思路

要按列表里的单个国家分组,首先得把数组列展开成单行单个国家,然后再进行常规的分组统计操作。

具体步骤及代码实现

假设你的原DataFrame名称为df,我们可以用PySpark内置的函数来完成:

  1. 导入所需函数
from pyspark.sql.functions import explode, count, trim
  1. 展开数组列
    用explode函数把countries列里的每个国家单独拆成一行,对应原列表的空值会生成null:
exploded_df = df.withColumn("country", explode(df.countries))
  1. 清洗数据
  • 过滤掉null值(对应原数据里的空列表)
  • 用trim去除国家名称前后的空格(比如你数据里最后一行的Великобритания 带有尾部空格,避免分组时被当成不同项)
cleaned_df = exploded_df.filter("country is not null").withColumn("country", trim("country"))
  1. 分组统计
    对清洗后的country列进行分组,并用count统计每个国家出现的次数:
result_df = cleaned_df.groupBy("country").agg(count("*").alias("count"))
  1. 查看结果
result_df.show()

运行后你会得到每个国家的统计结果,示例输出大致如下:

+-----------------+-----+
|          country|count|
+-----------------+-----+
|           Россия|    5|
|            Китай|    1|
|Великобритания|    2|
|          Норвегия|    1|
|              США|    3|
|           Италия|    1|
|           Грузия|    1|
|         Беларусь|    1|
+-----------------+-----+

补充说明

如果需要保留原数据里的空列表并统计其数量,可以把explode换成explode_outer,同时去掉过滤null的步骤,这样空列表会被统计为null项的数量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:46:49