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

如何用Spark的filter/where替代SQL的date(field_date)处理日期数据?

解决Spark中实现SQL date(field_date) 效果的问题

嘿,我来帮你搞定这个Spark日期过滤的问题!你想要用Spark的filter或where算子实现和SQL里date(field_date)一样的效果——也就是提取字段的日期部分,忽略时间和微秒对吧?下面分几种情况给你具体的实现方案:

情况1:field_date已经是Timestamp类型

如果你的field_date字段已经是Spark的Timestamp类型,直接用to_date函数就能提取日期部分,和SQL的date()函数完全等价。to_date会自动截断时间(包括微秒),只保留年月日部分。

Python 实现

from pyspark.sql.functions import to_date

# 使用where算子
filtered_df = df.where(to_date(df.field_date) == '2018-02-13')

# 或者用filter算子,两者效果完全相同
filtered_df = df.filter(to_date(df.field_date) == '2018-02-13')

Scala 实现

import org.apache.spark.sql.functions.to_date

// 使用where算子
val filteredDF = df.where(to_date($"field_date") === "2018-02-13")

// 或者filter算子
val filteredDF = df.filter(to_date($"field_date") === "2018-02-13")

情况2:field_date是String类型

如果field_date是字符串格式(比如你给出的2018-02-13 23:55:11.382928),需要先把它转换成Timestamp类型,再用to_date提取日期:

Python 实现

from pyspark.sql.functions import to_timestamp, to_date

# 先转成Timestamp,再提取日期(格式匹配带微秒的字符串)
filtered_df = df.where(
    to_date(to_timestamp(df.field_date, "yyyy-MM-dd HH:mm:ss.SSSSSS")) == '2018-02-13'
)

Scala 实现

import org.apache.spark.sql.functions.{to_timestamp, to_date}

val filteredDF = df.where(
    to_date(to_timestamp($"field_date", "yyyy-MM-dd HH:mm:ss.SSSSSS")) === "2018-02-13"
)

补充说明

  • Spark里的filter和where算子是完全等价的,只是命名不同,你可以根据自己的习惯选择使用。
  • 如果需要批量过滤多个日期,也可以把日期放到一个列表里,用isin方法,比如:
    target_dates = ['2018-02-13', '2018-02-14']
    filtered_df = df.filter(to_date(df.field_date).isin(target_dates))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:07:11