spark sql 获取系统时间,计算时间后结果浮点型转整型

来源:互联网 发布:知乎 被扒皮 编辑:程序博客网 时间:2024/05/17 21:52

spark sql 获取当前系统时间

 

 

使用sql的getdate 或者 sysdate方法,测试了,不可行。spark sql不认识这些方法,会出现如下错误

(Exception in thread "main" org.apache.spark.sql.AnalysisException: Undefined function: 'getdate'. This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 1 pos 7)

(未知的函数,在数据库中这个函数既不是临时注册函数也不是一个永久注册函数)


想起了spark sql的官方例子

在写spark sql语句的同时,是可以在语句中间拼接scala或者java代码的,那我们试试用java的时间套路看看能不能拼接呢?

 


 



使用spark sql拼接java时间

 

1.构造获取系统时间方法

//获取当前时间函数

def getDate(time:String) = {

  val now: Long = System.currentTimeMillis()

  var df: SimpleDateFormat = newSimpleDateFormat(time)

  df.format(now)

}

 

2.拼接spark sql 语句

spark.sql("SELECT Sname, ("+ getDate("yyyy") +" - substring(sbirthday, 0, 4)) AS age FROM STUDENT t").show()

 

3.测试结果

 


 

默认spark sql会把计算使用double类型,如果想进行浮点型转整型,可以借助cast函数,不过每个进行计算的字段都要使用这个函数

 

1.拼接spark sql 语句

spark.sql("SELECT Sname, (CAST("+ getDate("yyyy") +" AS INT) - CAST(substring(sbirthday, 0, 4) AS INT)) AS age " +

"FROM Student t").show()

 

2.测试结果

原创粉丝点击