pyspark groupby

在 PySpark 中,对于 group by 语句,agg 中使用 count 某一列和 count(*) 在一般情况下是不一样的。

让我们通过一个具体的例子来说明差异:

假设我们有以下 DataFrame df

python 复制代码
from pyspark.sql import SparkSession
from pyspark.sql.functions import count

spark = SparkSession.builder.appName("example").getOrCreate()

data = [
    (1, "a"),
    (1, "b"),
    (2, "c"),
    (2, None),
    (3, None)
]

df = spark.createDataFrame(data, ["id", "value"])
  • 当你使用 count("*") 时,它会计算每个组中的所有行数,不管列值是否为空:
python 复制代码
result = df.groupBy("id").agg(count("*").alias("count_star"))
result.show()

输出:

+---+----------+
| id|count_star|
+---+----------+
|  1|         2|
|  3|         1|
|  2|         2|
+---+----------+
  • 当你使用 count("value") 时,它只计算 value 列非空值的数量:
python 复制代码
result = df.groupBy("id").agg(count("value").alias("count_value"))
result.show()

输出:

+---+-----------+
| id|count_value|
+---+-----------+
|  1|          2|
|  3|          0|
|  2|          1|
+---+-----------+

可以看到区别:

  • count("*") 会统计所有行数,忽略列中的 null 值。
  • count("value") 只会统计非 null 的列值。因此,如果某列包含 null 值,count("column_name") 的结果可能会比 count("*") 更少。

总结:group byagg 使用 count 某一列只会统计该列的非空值,而 count(*) 会统计所有行数。两者结果可能不同,具体取决于数据列中是否包含 null

相关推荐
唯余木叶下弦声12 天前
PySpark之金融数据分析(Spark RDD、SQL练习题)
大数据·python·sql·数据分析·spark·pyspark
积跬步,慕至千里13 天前
Windows环境本地配置pyspark环境详细教程
windows·python·pyspark
唯余木叶下弦声2 个月前
Spark区分应用程序 Application、作业Job、阶段Stage、任务Task
大数据·spark·pyspark
唯余木叶下弦声2 个月前
PySpark3:pyspark.sql.functions常见的60个函数
python·spark·pyspark
氵文大师3 个月前
[pyspark] pyspark中如何修改列名字
pyspark
出发行进3 个月前
Spark的yarn集群环境搭建
大数据·linux·分布式·spark·pyspark
天冬忘忧3 个月前
PySpark 本地开发环境搭建与实践
spark·conda·pyspark
songqq273 个月前
【快速上手】pyspark 集群环境下的搭建(Yarn模式)
大数据·spark·pyspark
尘世壹俗人3 个月前
PySpark任务提交
大数据·pyspark
出发行进3 个月前
Spark学习
大数据·linux·python·数据分析·spark·centos·pyspark