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

相关推荐
天冬忘忧4 天前
PySpark 本地开发环境搭建与实践
spark·conda·pyspark
songqq275 天前
【快速上手】pyspark 集群环境下的搭建(Yarn模式)
大数据·spark·pyspark
尘世壹俗人6 天前
PySpark任务提交
大数据·pyspark
出发行进7 天前
Spark学习
大数据·linux·python·数据分析·spark·centos·pyspark
百流15 天前
Pyspark中pyspark.sql.functions常用方法(3)(array操作)
linux·python·spark·pyspark·1024程序员节
百流1 个月前
Pyspark中pyspark.sql.functions常用方法(2)(时间函数)
数据库·python·spark·pyspark·dataframe
百流1 个月前
Pyspark DataFrame中Column使用
linux·hadoop·python·spark·pyspark
百流1 个月前
Pyspark中GroupedData类型内置函数
开发语言·hadoop·python·spark·pyspark
百流2 个月前
Pyspark dataframe基本内置方法(4)
数据库·python·spark·pyspark·dataframe
南斯拉夫的铁托2 个月前
(PySpark)RDD实验实战——求商品销量排行
python·spark·pyspark