如何在PySpark中统计唯一值?附数据集与预期输出
在PySpark中统计每种食物对应的唯一日期数量
解决方法
核心思路是按食物名称分组,对每个分组的日期列做去重计数,借助PySpark的countDistinct函数就能快速实现需求。
完整代码示例
# 导入PySpark相关模块 from pyspark.sql import SparkSession from pyspark.sql.functions import countDistinct, regexp_replace # 初始化SparkSession spark = SparkSession.builder.appName("FoodDayCount").getOrCreate() # 构造你提供的数据集 data = [ ("Chiken", 2), ("Chiken", 6), ("Chiken", 2), ("Beef", 3), ("Chiken", 4), ("Beef", 6), ("Beef", 7) ] df = spark.createDataFrame(data, ["Food", "Day"]) # (可选)修正输入中Chicken的拼写错误(Chiken→Chicken) df = df.withColumn("Food", regexp_replace("Food", "Chiken", "Chicken")) # 分组统计唯一日期数量 result_df = df.groupBy("Food").agg(countDistinct("Day").alias("Day_Count")) # 输出结果 result_df.show()
运行结果
执行后会得到符合预期的输出:
+-------+---------+ | Food|Day_Count| +-------+---------+ |Chicken| 3| | Beef| 3| +-------+---------+
代码说明
groupBy("Food"):按食物名称对数据分组countDistinct("Day"):计算每个分组内日期列的唯一值数量alias("Day_Count"):把聚合结果列重命名为预期的Day_Count- 拼写修正步骤:因为输入里的
Chiken和预期输出的Chicken拼写不一致,所以添加了正则替换,若你的原始数据拼写正确可直接跳过此步骤。
内容的提问来源于stack exchange,提问作者Nabih Bawazir
相关产品推荐
相关产品推荐

