Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何用Spark filter替换SQL日期(字段\日期)?_Scala_Apache Spark_Apache Spark Sql_Spark Dataframe - Fatal编程技术网

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)