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
相关产品推荐
相关产品推荐

