RDD應用實例之app版本升級分析

一、數據

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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章