RDD应用实例之app版本升级分析

3 篇文章 0 订阅
一、数据
2020-05-14,张三,王者荣耀,华为应用,北京,v1.0
2020-05-14,李四,王者荣耀,应用宝,北京,v1.2
2020-05-14,张三,王者荣耀,华为应用,天津,v1.2
2020-05-14,张三,王者荣耀,小米应用,天津,v2.0
2020-05-14,王五,阴阳师,app store,上海,v1.8
2020-05-14,张三,王者荣耀,小米应用,天津,v2.0
2020-05-14,王五,阴阳师,app store,上海,v1.9
2020-05-15,王五,阴阳师,app store,上海,v2.0
2020-05-15,王五,阴阳师,app store,上海,v2.3
2020-05-15,张三,王者荣耀,华为应用,北京,v2.0
2020-05-15,李四,王者荣耀,应用宝,北京,v1.2
2020-05-15,李四,王者荣耀,应用宝,北京,v1.5
2020-05-15,王五,阴阳师,app store,上海,v2.9
二、需求
需求:不考虑地区,列出版本升级情况
结果格式:日期,姓名,app,下载渠道,升级前版本,升级后版本

示例:
2020-05-15,张三,王者荣耀,华为应用,北京,v1.0
2020-05-15,张三,王者荣耀,华为应用,天津,v1.2
2020-05-15,张三,王者荣耀,华为应用,天津,v2.0
结果:
2020-05-15,张三,王者荣耀,应用宝,v1.0,v1.2
2020-05-15,张三,王者荣耀,应用宝,v1.2,v2.0
三、代码
	val conf=new SparkConf().setAppName("App Update").setMaster("local")
    val sc=new SparkContext(conf)

    val rdd=sc.textFile("E:\\data\\spark\\rdd\\test\\read\\app.log")
    val mapRdd=rdd.filter(line=>line.contains("v")).map(line=>{
      val arr=line.split(",",-1)
        ((arr(0),arr(1),arr(2),arr(3)), arr(5))
    })
    val keyRdd=mapRdd.groupByKey()
    val filterRdd=keyRdd.mapValues(line=>line.toList.distinct).filter(line=>line._2.length>1)
    val zipRdd=filterRdd.mapValues(line=>line.zip(line.tail))
    val resultRdd=zipRdd.flatMap(line=>{
       line._2.map(x=>{
          (line._1._1, line._1._2, line._1._3, line._1._4, x._1, x._2)
       })
    })
    resultRdd.foreach(println)
四、结果
(2020-05-14,张三,王者荣耀,华为应用,v1.0,v1.2)
(2020-05-15,李四,王者荣耀,应用宝,v1.2,v1.5)
(2020-05-14,王五,阴阳师,app store,v1.8,v1.9)
(2020-05-15,王五,阴阳师,app store,v2.0,v2.3)
(2020-05-15,王五,阴阳师,app store,v2.3,v2.9)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值