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

PySpark中Group By与聚合函数使用问题:日期MIN取值异常

问题原因

DATE列存储为字符串类型,格式为dd-MM-yyyy,直接调用min()函数时,PySpark会按照字符串字典序进行比较,而非日期的实际先后逻辑。这种格式的字符串从左到右逐字符对比(先比日,再比月,最后比年),和日期的自然排序逻辑(年→月→日)完全不符,导致聚合结果不符合预期。

解决方案

先将字符串类型的DATE列转换为PySpark日期类型,再执行分组聚合操作,具体代码如下:

from pyspark.sql.functions import count, min, to_date, col

# 1. 转换字符串日期为日期类型,指定格式为dd-MM-yyyy
# 2. 按运动类型分组,计算计数和最小日期
# 3. 过滤出计数大于1的分组
# 4. 可选:将日期类型转回原字符串格式
df_result = df.withColumn("parsed_date", to_date(col("DATE"), "dd-MM-yyyy")) \
              .groupBy("SPORTS_INTERESTED") \
              .agg(
                  count("SPORTS_INTERESTED").alias("FIRST_COUNT"),
                  min("parsed_date").alias("MIN_OF_DATE_COLUMN")
              ) \
              .filter(col("FIRST_COUNT") > 1) \
              .withColumn("MIN_OF_DATE_COLUMN", col("MIN_OF_DATE_COLUMN").cast("string"))

# 查看结果
df_result.show()

执行后输出符合预期:

+-----------------+-------------------+
|SPORTS_INTERESTED|MIN_OF_DATE_COLUMN|
+-----------------+-------------------+
|          CRICKET|        23-09-2020|
|         FOOTBALL|        13-09-2021|
+-----------------+-------------------+
核心要点
  • to_date(col("DATE"), "dd-MM-yyyy"):将字符串按指定格式解析为日期类型,此时PySpark会遵循日期的自然排序逻辑比较大小。
  • 若无需保留字符串格式,可省略最后的cast("string")步骤,直接输出日期类型结果。

内容的提问来源于stack exchange,提问作者BigData Lover

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:25:13