Scala 如何用Spark filter替换SQL日期(字段\日期)?
我有以下使用Scala 如何用Spark filter替换SQL日期(字段\日期)?,scala,apache-spark,apache-spark-sql,spark-dataframe,Scala,Apache Spark,Apache Spark Sql,Spark Dataframe,我有以下使用sql的代码: val yesterdayDate = "2018-03-13" df.createOrReplaceTempView("myTable") val result = spark.sql("select * from myTable where date(field_date) = '" + yesterdayDate) field\u date的值采用以下格式2018-02-13 23:55:11.382928 我想使用Spark的过滤器或where获得相同的结果
sql
的代码:
val yesterdayDate = "2018-03-13"
df.createOrReplaceTempView("myTable")
val result = spark.sql("select * from myTable where date(field_date) = '" + yesterdayDate)
field\u date
的值采用以下格式2018-02-13 23:55:11.382928
我想使用Spark的
过滤器
或where
获得相同的结果。您想说,在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查询那么您可以使用sql api,如下所示
是的,我指的是Spark sql API。如果执行
where($“field_date”===s“$yesterdayDate”)
,则日期的格式不同,否?是的,它们是不同的类型,但您可以强制转换其中一个值。例如df.select(“*”).where(functions.date\u format($“field\u date.cast(DateType)”,“yyyy-MM-dd”)==s“$yesterdayDate”),所以答案并不反映它。我的问题是我想避免使用Spark sql API。抱歉,如果不清楚。我想使用过滤器
或where
而不使用spark.sql
@Markus,更新了我的答案:)
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)