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

相关推荐
南斯拉夫的铁托1 天前
(PySpark)RDD实验实战——求商品销量排行
python·spark·pyspark
百流5 天前
Pyspark下操作dataframe方法(2)
hadoop·python·spark·pyspark
放学-别走6 天前
基于Spark 的零售交易数据挖掘分析与可视化
大数据·数据挖掘·数据分析·spark·零售·pyspark·大作业
百流8 天前
Pyspark下操作dataframe方法(1)
linux·hadoop·python·spark·pyspark
百流8 天前
Pyspark下操作dataframe方法(3)
hive·python·pyspark
还是那个同伟伟13 天前
Pyspark DataFrame常用操作函数和示例
人工智能·机器学习·spark·pandas·pyspark
唯余木叶下弦声14 天前
Linux CentOS安装PySpark3.5(单机版)详细教程及机器学习实战
python·spark·pyspark
百流17 天前
Pyspark中的ROW对象使用
开发语言·python·spark·pyspark
小鸿的摸鱼日常1 个月前
PySpark,一个超级强大的 Python 库
python·pyspark·python 库之旅
财天椒1 个月前
【Pyspark-驯化】一文搞懂Pyspark中表连接的使用技巧
大数据·hadoop·hdfs·spark·pyspark