spark sql 处理时间类型
来源:互联网 发布:mac rar解压软件下载 编辑:程序博客网 时间:2024/06/08 16:25
近期研究了下spark sql。
发现这scala 与 sql 混写的套路很酷炫呀!
一开始就出现了有点小坑爹的问题,相当于自己又涨了一点经验值,嘿嘿
这个问题也是在数据库中操作很常见的一个问题。
我们怎么处理时间类型的数据呢?
比如:
1、时间类型应用
2、时间类型运算
3、时间类型小时级别运算
时间类型应用
先看了看官网,说是支持timestamp类型的格式操作
我们再找找有木有操作demo呢
结果,最后就一个这
坑爹呀,官方没提供操作demo
怎么对我这个小白这么无情。555
算了,直接代码里面尝试吧
在配置前,需要引用一下类型的包
importorg.apache.spark.sql.types._
在自定义schema的时候,可以设置每个字段的数据类型,这里我们可以把时间字段设置成TimestampType数据类型,见下图
来走点数据,看看能不能操作
结果报错
java.lang.String is not a valid external type for schema of timestamp
看这个意思,像是类型的问题。
郁闷了好久,找了半天发现,最后在官方文档中发现
这个TimestampType其实就是调用java的 java.sql.Timestamp
卧槽,那我可以看看java里面的怎么操作呀
最后需要调用一下valueOf方法就不报错了
时间类型运算
另外一个问题,spark sql 处理时间类型 做简单运算
我怎么对时间格式做加减法呢?
既然是sql,我们先找找sql是怎么做的
( cast(end_time as date)-cast(start_time as date) )*24*3600
相当于把字段 as date了,就可以做运算了
spark sql 里能不能行呢?
结果出错
spark sql time 做减法的错误
Exception in thread "main" org.apache.spark.sql.AnalysisException: cannot resolve '(CAST(bbb.`START_TIME` AS DATE) - CAST(bbb.`END_TIME` AS DATE))'
due to data type mismatch: '(CAST(bbb.`START_TIME` AS DATE) - CAST(bbb.`END_TIME` AS DATE))' requires (numeric or calendarinterval) type, not date; line 1 pos 7;
最后凭感觉试出来,是数据类型的问题
spark.sql("SELECT (cast(END_TIME as long)-cast(START_TIME as long)) totaltime FROM bbb").show()
这个as相当于会把Timestamp类型自动转成long
时间类型小时级别运算
更多的时候,我们可能需要对时间字段的小时级别,分钟级别进行比对
我们也先看sql是怎么操作的
to_char(start_time, 'yyyymmdd hh24')
试试看能不能行
结果出现的错误
Exception in thread "main" org.apache.spark.sql.AnalysisException:
Undefined function: 'to_char'.
This function is neither a registered temporary function nor a permanent function registered in the database 'default'.; line 1 pos 24
估计没有这个函数
最后使用substring函数对时间字段切分后,可以实现比对
substring(START_TIME,12,2) >= 8
12 : 开始的下标
2 : 截取的位数
- spark sql 处理时间类型
- NSDate时间类型处理
- JAXB处理时间类型
- oracle 时间类型处理
- SolrJ处理时间类型
- SQL 操作时间类型
- SQL Server2008 时间类型
- sql时间类型
- SQL 时间类型转换
- sql server时间类型
- sql 日期类型处理
- SQL text类型处理
- PL/SQL时间处理
- SQL时间/日期处理
- SQL时间日期处理
- sql 时间处理
- sql 时间格式处理
- sql时间的处理
- linux下安装docker
- JAVA基础(六)之Servlet
- 接口测试--postman interceptor插件
- D3D9函数(持续添加)
- 训练网络的一些trick(1):pre_train与逐层拷贝网络
- spark sql 处理时间类型
- [YTU]_2443( C++习题 复数类--重载运算符3+)
- MFC 操作 excel
- git学习0
- Android 自定义View(一)原理
- BS结构浏览器网页读写IC卡技术汇总
- day-18 paramiko 实现sftp功能
- BZOJ 1202: [HNOI2005]狡猾的商人
- Linux输入子系统之触摸屏驱动2