如何用 Spark 过滤器替换 SQL date(field_date)?

How to substitute SQL date(field_date) by Spark filter?

我有以下使用 sql 的代码:

val yesterdayDate = "2018-03-13"
df.createOrReplaceTempView("myTable")
val result = spark.sql("select * from myTable where date(field_date) = '" + yesterdayDate)

field_date 的值具有以下格式 2018-02-13 23:55:11.382928

我想使用 Spark 的 filterwhere 获得相同的结果。

你想说吗,在 spark sql API?

如果是,你可以

import spark.implicits._

val yesterdayDate = "2018-03-13"
val df = spark.read // read the source

val result = df.select("*").where($"field_date" === s"$yesterdayDate")

我不得不在这里而不是在评论中进行编辑。

df.select("*").where(functions.date_format($"field_date".cast(DateType), "yyyy-MM-dd") === s"$yesterdayDate")

以下 sql 查询 应该适合您

val yesterdayDate = "2018-03-13"
df.createOrReplaceTempView("myTable")
val result = spark.sql(s"select * from myTable where date(field_date) == '${yesterdayDate}'")

result.show(false)

如果你不想使用sql查询那么你可以使用sqlapi如下

val yesterdayDate = "2018-03-13"
import org.apache.spark.sql.functions._
df.select("*").where(date_format(col("field_date"), "yyyy-MM-dd") === yesterdayDate).show(false)