sinat_32635107 2019-03-07 18:07 采纳率: 60%
浏览 461
已结题

如何使用Spark将GPS点切成trip

您好 我需要使用spark完成时间序列的聚合,具体是需要将已经按照车辆id和时间排序后的小汽车gps数据的DataFrame按照 【col_sev】 列为1的划分为单独trip,处理前的数据是这样的

    val taxiRaw = spark.sparkContext.textFile("E:/demo_20180821.dat")
    import spark.implicits._
    val safeParse = Parse.safe(Parse.parseRecords)
    val taxiParsed = taxiRaw.map(safeParse)
    val taxiGood = taxiParsed.map(_.left.get).toDS
..... 各种数据清洗
    val taxiClean = ....toDF()
    demo.show(100)
+-------+-------------------+---------+----------+-------+
|col_car|          col_dttim|  col_lat|   col_lon|col_sev|
+-------+-------------------+---------+----------+-------+
|    ID1|2018-08-21 09:29:57| 39.88922|   116.347|      0|
|    ID1|2018-08-21 09:30:59| 39.88968|116.346998|      0|
|    ID1|2018-08-21 09:31:30| 39.89037|116.346978|      1|
|    ID1|2018-08-21 09:31:39|39.890758|116.346947|      1|
|    ID1|2018-08-21 09:33:05|39.895908| 116.34676|      1|
|    ID1|2018-08-21 09:33:45|39.896063|116.346745|      1|
|    ID1|2018-08-21 09:34:05| 39.89609|116.346735|      1|
|    ID1|2018-08-21 09:34:31|39.896453| 116.34672|      1|
|    ID1|2018-08-21 09:35:41|39.897587|116.346692|      1|
|    ID1|2018-08-21 09:37:15|39.898068|116.346638|      1|
|    ID1|2018-08-21 09:37:35|39.898123|116.346603|      1|
|    ID1|2018-08-21 09:38:35|39.898462|116.346615|      1|
|    ID1|2018-08-21 09:38:56|39.898408|116.346615|      1|
|    ID1|2018-08-21 09:39:05|39.898382|116.346622|      1|
|    ID1|2018-08-21 09:39:48|39.898593| 116.34664|      1|
|    ID1|2018-08-21 09:40:18|39.899062|116.346658|      1|
|    ID1|2018-08-21 09:40:28|39.899055|116.346662|      1|
|    ID1|2018-08-21 09:40:48|39.899097|116.346635|      1|
|    ID1|2018-08-21 09:41:20|39.899847|116.346443|      1|
|    ID1|2018-08-21 09:44:40| 39.89988|116.345462|      1|
|    ID1|2018-08-21 09:49:02|39.901228|116.343818|      1|
|    ID1|2018-08-21 09:52:07| 39.90414|116.337148|      1|
|    ID1|2018-08-21 09:52:59|39.905652|116.337548|      1|
|    ID1|2018-08-21 09:56:58| 39.91248|116.339273|      1|
|    ID1|2018-08-21 09:58:11|39.912655|116.342495|      0|
|    ID1|2018-08-21 09:58:38|39.912698|116.343038|      0|
|    ID1|2018-08-21 09:59:12|39.914267|116.343198|      0|
|    ID1|2018-08-21 10:00:40|39.917063|116.342582|      0|
|    ID1|2018-08-21 10:01:12| 39.91744|116.341958|      0|

后面还有很多车和不同的服务状态

需要整理成

|col_car|tripID|          Starttime|start_lat| start_lon|            Endtime|  end_lat|   end_lon|
+-------+------|-------------------+---------+----------+-------------------+---------+----------+
|    ID1|     2|2018-08-21 09:31:30| 39.89037|116.346978|2018-08-21 09:56:58| 39.91248|116.339273|

spark好像没有这种类似的算子提供不定长合并,groupby因为没有key也无法完成

  • 写回答

2条回答

  • devmiao 2019-03-08 08:41
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能