spark sql 数据类型转换_spark sql时间类型转换以及其他

1.spark sql的日期转换一般使用两种形式

第一种使用

to_timestamp(REACHTIME1,"yyyy-MM-dd HH24:mi:ss") //它将字符串时间转换为日期类型 例如2018-10-10 12:34:43

第二种使用时间戳的形式

to_timestamp(a.REACHTIME,"yyyy-MM-dd HH24:mi:ss") //转后是1970年至今的时间戳一大长串数据

2.如果spark是在本地电脑上跑,没有 打成jar放在集群上跑。只要代码运行,在本地也可以查看spark跑的过程

本地查看spark运行的路径:http://localhost:4040/jobs/    注意要查看spark状态,无论是集群还是本地,都要运行spark项目且没有中断或停止可以看

3.说一些oralce和spark sql的语句

oralce方面:

WHERE D.LINE_NO(+) = E.LINE_NO //这个是sql片段。里面的(+)只得是是右连接这个字段

spark sql方面

LEAD (b.DISTANCE) OVER (PARTITION BY a.LINENO,a.BUSNO,a.ISUPDOWN ORDER BY REACHTIME) DISTANCE1

//这个lead...over在oralce也用到了。它的作用是获取下一条数据信息,又叫开窗函数

DISTANCE1是别名//网址参考:https://blog.csdn.net/qq_39869388/article/details/80364985---spark streaming消费数据插入hbase里//https://www.cnblogs.com/zhaojinhui/p/3999469.html---sql//https://blog.csdn.net/qq_33283716/article/details/81043264---spark sql

4.日期转换的另一种

java也是一样,下面以scala为例,我获取的日期时间类型是String类型。要先将字符串转为日期类型,然后再格式化自己想要的类型

//字符串转换日期日期类型

var sitetime= line._2.toString //yyyy-MM-dd HH24:mi:ss

val dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")

val mdate=dateFormat.parse(sitetime)//第二次转换格式

val dateFormat3 = new SimpleDateFormat("yyyyMMddHHmmss")

val mdate3=dateFormat3.format(mdate)

println("mdate:"+mdate3)

5.在代码里拼接hbase的rowkey

val rowkey =

""" |SELECT|concat(reverse(ALLOTTIME) , ISUPDOWN , (lpad(LINENO,6,0)) ,HOUR , (lpad(LABELNO,2,0)), (lpad(STATIONID,6,0))) asROWKEY,|LINENO,ISUPDOWN,LABELNO,STATIONID,STATIONNAME,PASSENGER,ALLOTTIME,HOUR|FROM ROW""".stripMargin

入库层面

6.日期类型计算(日期类型多种多样,祝你好运),下面标红是重点。这样做格式化kafka时间,然后将下面标红作为视图为下次计算做准备

val strSql=

""" |SELECT|LEAD(A.STATIONID)OVER(PARTITION BY A.LINENO,A.BUSNO,A.ISUPDOWN ORDER BY REACHTIME) STATIONIDNEXT,|LEAD(A.LABELNO)OVER(PARTITION BY A.LINENO,A.BUSNO,A.ISUPDOWN ORDER BY REACHTIME) LABELNONEXT,|B.DISTANCE,|LEAD(B.DISTANCE)OVER(PARTITION BY A.LINENO,A.BUSNO,A.ISUPDOWN ORDER BY REACHTIME) DISTANCENEXT,|to_timestamp(A.REACHTIME) REACHTIME,|to_timestamp(LEAD(A.REACHTIME)OVER(PARTITION BY A.LINENO,A.BUSNO,A.ISUPDOWN ORDER BY REACHTIME)) REACHTIMENEXT|--unix_timestamp(A.REACHTIME,'yyyy-MM-dd HH24:mi:ss'),这些没有用|--unix_timestamp(LEAD(A.REACHTIME)OVER(PARTITION BY A.LINENO,A.BUSNO,A.ISUPDOWN ORDER BY REACHTIME),'yyyy-MM-dd HH24:mi:ss') REACHTIMENEXT 这些没有用|FROM stationcurrenttable A , TM_STATION_LINE_INFO B|WHERE A.LINENO=B.LINENO AND A.ISUPDOWN=B.ISUPDOWN AND A.LABELNO=B.LABELNO AND A.STATIONID=B.STATIONID""".stripMargin

7.时间公里计算

val strSqlMid=

""" |SELECT LINENO,ISUPDOWN,LABELNO,BUSNO,LABELNONEXT,STATIONID,STATIONIDNEXT,|ROUND(((DISTANCENEXT-DISTANCE)/1000)/((cast(REACHTIMENEXT as long)-cast(REACHTIME as long))/(60*60)),2) SPEED|--ROUND(((DISTANCENEXT-DISTANCE)/1000)/((REACHTIMENEXT-REACHTIME)/1000*60*60),2) SPEED|FROM speedMidTable|WHERE LABELNONEXT IS NOT NULL AND STATIONID<>STATIONIDNEXT AND REACHTIME<>REACHTIMENEXT""".stripMargin

8.丢掉一些null数据(或等于0,小于0的数据)小技巧

val sql4=

""" |select * from aaa where STATIONID != 'null' and STATIONNAME != 'null'

""".stripMargin //这里过滤,作为视图,为下面做准备

sqlContext.sql(sql4).toDF("ROWKEY","LINENO","ISUPDOWN","LABELNO","FULLRATE","STATIONID","STATIONNAME","ALLOTTIME","HOUR").createOrReplaceTempView("RW")

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页

打赏作者

weixin_39535527

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值