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

PySpark筛选最大日期问题:类型转换、自动筛选及空表原因咨询

字符串日期列处理:转日期类型、自动筛选最新日期及空表原因

1. 把字符串日期转成日期类型

用Spark的to_date函数就能完成转换,指定好你的日期格式(比如常见的yyyy-MM-dd):

from pyspark.sql.functions import to_date

# 转换as_of_date列为日期类型,格式按需调整
raw_table = raw_table.withColumn("as_of_date", to_date("as_of_date", "yyyy-MM-dd"))

如果你的日期是其他格式(比如MM/dd/yyyy),把第二个参数改成对应格式即可。

2. 自动筛选最新日期的数据

给你两种实用方法,按需选择:

方法一:先获取最大日期再过滤

先从表里查出最新日期,再用这个日期筛选数据:

from pyspark.sql.functions import max

# 获取最新日期
latest_date = raw_table.select(max("as_of_date")).first()[0]

# 筛选最新日期的去重数据
extract = raw_table.drop_duplicates().filter(raw_table.as_of_date == latest_date)

方法二:用窗口函数(效率更高)

适合大数据量场景,避免两次扫描表:

from pyspark.sql.window import Window
from pyspark.sql.functions import row_number

# 按日期倒序排序,给每行加序号
window_spec = Window.partitionBy().orderBy(raw_table.as_of_date.desc())
extract = raw_table.drop_duplicates() \
           .withColumn("row_num", row_number().over(window_spec)) \
           .filter("row_num == 1") \
           .drop("row_num")

3. 手动筛选出空表的原因

无非这几种情况:

  • 日期格式不匹配:比如数据里的日期是2022/11/25或者2022-11-025,你写的是'2022-11-25',字符串完全对不上,自然没结果。
  • 存在隐藏字符:日期字符串前后有空格、制表符这类不可见字符,比如' 2022-11-25 ',和你写的无空格字符串不匹配。
  • 数据里根本没这个日期:你的raw_table里本来就没有2022-11-25这条日期的数据,筛选当然是空表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:25:36