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

如何用PySpark或SQL按列A分组排序并统计列B去重值数量

实现方案

PySpark 实现

通过分组、去重计数、排序三步即可完成需求:

from pyspark.sql import SparkSession
from pyspark.sql.functions import countDistinct

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

# 创建示例DataFrame(替换成你的实际数据)
data = [
    ("APPLE", "RED"),
    ("APPLE", "GREEN"),
    ("GRAPE", "BLACK"),
    ("BANANA", "RED"),
    ("BANANA", "BLUE"),
    ("BANANA", "GREEN"),
    ("BANANA", "GREEN")
]
df = spark.createDataFrame(data, ["Column A", "Column B"])

# 分组统计去重值并排序
result_df = df.groupBy("Column A") \
              .agg(countDistinct("Column B").alias("Column B")) \
              .orderBy("Column A")

# 查看结果
result_df.show()

核心逻辑:

  • groupBy("Column A"):按Column A字段分组
  • countDistinct("Column B").alias("Column B"):统计每组内Column B的唯一值数量,并将结果列重命名为Column B
  • orderBy("Column A"):按Column A升序排序

SQL 实现

不管是传统关系型数据库还是Spark SQL,都可以用相同的逻辑实现:

Spark SQL 版本

# 将DataFrame注册为临时视图
df.createOrReplaceTempView("fruit_table")

# 执行SQL查询
result_df = spark.sql("""
    SELECT `Column A`, COUNT(DISTINCT `Column B`) AS `Column B`
    FROM fruit_table
    GROUP BY `Column A`
    ORDER BY `Column A`
""")

result_df.show()

传统SQL 版本(适用于MySQL、PostgreSQL等)

SELECT `Column A`, COUNT(DISTINCT `Column B`) AS `Column B`
FROM your_table_name
GROUP BY `Column A`
ORDER BY `Column A`;

核心逻辑:

  • COUNT(DISTINCT Column B):直接统计分组内Column B的唯一值数量
  • GROUP BY Column A:按Column A字段分组
  • ORDER BY Column A:按Column A升序排序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 20:50:29