首页 > 解决方案 > 如何在mysql之上的spark中查询字符串时间

问题描述

我有一个mysql表如下

id , score ,  score_time ( type text)
 1,   10,     Mon, 25 Oct 2021 15:26:25 GMT
 2,   25,     Mon, 25 Oct 2021 15:26:25 GMT
 3,   12,     Mon, 25 Oct 2021 15:26:25 GMT

火花代码是:

val stbl = spark.read.format("jdbc").option("url", s"jdbc:mysql://$sqlCluster")
  .option("driver", "com.mysql.jdbc.Driver")
  .option("user", username).option("password", password)
  .load()
stbl.createOrReplaceTempView(MAPPING_TABLE)

现在我需要查询 score_time > 特定日期字符串的所有数据

val qdt = "2021-10-30"
val sqlQuery =
  s"""
    |select id,
    |       score
    |from ${MAPPING_TABLE}
    | where STR_TO_DATE(MID(score_time,6,11),'%d %b %Y') > '${qdt}'
    |limit 10;
    |""".stripMargin

spark.sql(sqlQuery).as[ScoreData].show()

在 MySQL 工具中,此查询正在运行,但在 spark 中,它失败并出现以下错误

 org.apache.spark.sql.AnalysisException: Undefined function: 'STR_TO_DATE'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 6 pos 7

运行此类查询的正确方法是什么?

标签: mysqlscalaapache-spark

解决方案


推荐阅读