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

在PySpark中按gcol分组统计ccol1值计数(含Null)的实现方法

PySpark分组统计含Null值的字段出现次数

核心方案:直接多字段分组计数

不需要使用pivot,你的需求是保留ccol1的每个值(包括Null)作为行记录,统计每组内的频次,直接通过多字段分组+计数即可实现,Spark默认会将Null值作为合法的分组键。

PySpark 代码实现

from pyspark.sql import SparkSession
from pyspark.sql.functions import count

# 初始化SparkSession
spark = SparkSession.builder.appName("CountWithNull").getOrCreate()

# 创建测试DataFrame
data = [
    ("a", 1, "apple"),
    ("b", 1, "orange"),
    ("a", 2, None),
    ("b", 1, "orange"),
    ("b", 1, "orange")
]
df = spark.createDataFrame(data, ["gcol1", "gcol2", "ccol1"])

# 分组统计:按gcol1、gcol2、ccol1分组,计算每组数量
result_df = df.groupBy("gcol1", "gcol2", "ccol1").agg(count("*").alias("count"))

# 查看结果
result_df.show()

执行后输出结果与期望一致:

+-----+-----+------+-----+
|gcol1|gcol2| ccol1|count|
+-----+-----+------+-----+
|    a|    1| apple|    1|
|    a|    2|  null|    1|
|    b|    1|orange|    3|
+-----+-----+------+-----+

转换为Pandas DataFrame的方案

如果需要转成Pandas处理,代码如下:

# 转换为Pandas DataFrame并统计
pandas_df = df.toPandas()
pandas_result = pandas_df.groupby(["gcol1", "gcol2", "ccol1"], dropna=False).size().reset_index(name="count")

print(pandas_result)

这里显式指定dropna=False,确保Pandas分组时保留Null值(默认也会保留,但显式指定更稳妥)。输出结果:

gcol1  gcol2   ccol1  count
0     a      1   apple      1
1     a      2     NaN      1
2     b      1  orange      3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 13:35:04