spark出租车情况统计

spark udf练习

# -*- coding: UTF-8 -*-
from pyspark.sql import SparkSession
import json
if __name__ == '__main__':
    spark = SparkSession.builder.master("local").appName("demo").getOrCreate()
    #**********begin**********#
    df = spark.read.option("header", True).option("delimiter", "\t").csv("/root/data2.csv")
    # 1 将时间戳转换成时间 ,并将列名重命名为 TIME
    df.createTempView("data")
    spark.sql(
        "select TRIP_ID,CALL_TYPE,ORIGIN_CALL,TAXI_ID,ORIGIN_STAND,from_unixtime(TIMESTAMP,'yyyy-MM-dd') as TIME ,POLYLINE from data").show()
    # 2.1 计算每个行程总时长,以秒为单位,并将其作为新列,列名为 TIMELEN
    # 2.2 分离出起始位置与目的位置作为新列,起始位置列名为 STARTLOCATION,目的位置列名为 ENDLOCATION
    spark.udf.register("timeLen", lambda x: {
        (len(json.loads(x)) - 1) * 15 if len(json.loads(x)) > 0 else 0
    })
    spark.udf.register("startLocation", lambda x: {
        str(json.loads(x)[0]) if len(json.loads(x)) > 0 else ""
    })
    spark.udf.register("endLocation", lambda x: {
        str(json.loads(x)[len(json.loads(x)) - 1]) if len(json.loads(x)) > 0 else ""
    })
    spark.sql(
        "select TRIP_ID,CALL_TYPE,ORIGIN_CALL,TAXI_ID,ORIGIN_STAND,from_unixtime(TIMESTAMP,'yyyy-MM-dd') as TIME ,POLYLINE,timeLen(POLYLINE) as TIMELEN,startLocation(POLYLINE) as STARTLOCATION ,endLocation(POLYLINE) as ENDLOCATION  from data").createTempView(
        "data2")
    spark.sql("select * from data2").show()
    # 3 统计每天各种呼叫类型的数量并以CALL_TYPE,TIME升序排序
    spark.sql("select CALL_TYPE,TIME,count(1) as NUM from data2 group by CALL_TYPE,TIME order by CALL_TYPE,TIME").show()
    #**********end**********#
全部评论

相关推荐

浪子陪都:简历最优秀的地方放到了后面,国奖,校级奖学金这些是最亮眼的。说明你跟同级别的学生不一样。 建议台灯这个,PCB布局布线这个词汇不专业,业内是PCB Layout,第二,单片机的板子一般不用考虑SI,PI 都是低速信号,只要遵循3W原则就好了。 单片机的项目太low了,技能这块,你要看一下BOSS直聘的招聘要求,按照别人的要求写,一些关键词可以增加你简历被检索到的概率。 主修课程不用写,这个没有人去关注的。
点赞 评论 收藏
分享
02-11 17:47
已编辑
门头沟学院 Java
神哥不得了:神哥来啦~建议先在网上找一些高频的八股去背,然后再去广泛的背八股,这样的学习会更有效率一些,简历的这两个项目建议换掉,换成两个高质量的项目,这样的话获得面试的比例会更高一点,专业技能的话排版要注意一下,要加句号的话就都加,要不加就都不加,荣誉奖项的话写在教育经历里边吧,这个确实没有太多的含金量
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务