如何用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 BorderBy("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
相关产品推荐
相关产品推荐

