spark sql 获取系统时间,计算时间后结果浮点型转整型
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 = new SimpleDateFormat(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.测试结果