SparkSQL使用自定义的DATE_FORMAT函数

Tue Dec 29 09:43:41 CST 2015 2022 大数据

文章摘要SparkSQL对于SQL语句中的函数,会经过SqlParser解析成UnresolvedFunction,UnresolvedFunction最后会被Analyzer解析。解析SQL语句中函数的工作,就是在Analyzer中的ResolveFunctions进行。但是SparkSQL自带支持的函数比较少,很多需要我们自己去自定义。

SparkSQL支持的SQL函数比较少,不便于我们查询。有时我们想要用DATE_FORMAT,但是SparkSQL却不支持。


使用UDF,可以自定义函数DATE_FORMAT

sqlContext.udf.register("DATE_FORMAT", (date: java.sql.Date, format: String) => {
      if (date == null)
        ""
      else {
        val strSplit = date.toString.split("-")
        format match {
          case "%Y" => strSplit(0)
          case "%Y%m" => strSplit(0) + strSplit(1)
          case "%Y%m%d" => strSplit(0) + strSplit(1) + strSplit(2)
        }
      }
})

sqlContext.sql("select DATE_FORMAT(my_date, '%Y%m') as date_str from table").show

这样的话,就能自定义DATE_FORMAT函数了。


当然,如果你需要别的函数,也可以如法炮制!

打赏
打赏

分享到: