如何使用PySpark过滤DataFrame中SaleDate等于当前日期的记录
错误原因
- 语法规则错误:Python/PySpark的条件判断中等值比较需要使用双等号
==,你代码中使用了赋值运算符=,同时括号未闭合,直接触发语法报错 - 类型匹配问题:
SaleDate为字符串类型,需要和同格式的字符串比较,或者统一转换为日期类型后再比较
正确实现代码
如果你的SaleDate字符串存储格式为yyyy-MM-dd(和示例日期格式一致),推荐优先用字符串直接比较,无需转换字段类型,性能更高:
from pyspark.sql.functions import col target_date = "2021-10-16" filtered_df = df.where(col("SaleDate") == target_date)
如果需要先统一转换为日期类型再比较(比如存在格式不统一需要校验的场景),可以用以下写法,注意第二个格式参数要和你实际的SaleDate字符串格式匹配:
from pyspark.sql.functions import col, to_date, lit filtered_df = df.where( to_date(col("SaleDate"), "yyyy-MM-dd") == to_date(lit("2021-10-16")) )
如果你需要的是动态取代码运行时的当前日期,而非固定2021年10月16日,可直接调用current_date()函数:
from pyspark.sql.functions import col, to_date, current_date filtered_df = df.where( to_date(col("SaleDate"), "yyyy-MM-dd") == current_date() )
内容的提问来源于stack exchange,提问作者Patterson
相关产品推荐
相关产品推荐

