spark lac 分析停留最長的兩個地方
package hgs.spark.othertest import org.apache.spark.SparkConf import org.apache.spark.SparkContext object FindTheTop2 { def main(args: Array[String]): Unit = { val conf = new SparkConf().setAppName("FindTheTop2").setMaster("local[3]") val sc = new SparkContext(conf) val rdd1 = sc.textFile("D:\\bs_log") //rdd_phone_lac_time:(18688888888 16030401EAFB68F1E3CDF819735E1C66,-20160327082400,1), (18611132889 16030401EAFB68F1E3CDF819735E1C66,-20160327082500,1) //先對映為上一行為例的map(K,V) val rdd_phone_lac_time = rdd1.map(x=>{ val list = x.split(",") if(Integer.parseInt(list(3))==1) (list(0)+" "+list(2),-list(1).toLong) else{ (list(0)+" "+list(2),list(1).toLong) } } ) //根據rdd_phone_lac_time 的key進行reduce,將所有key相同的資料相加 val rdd_reduce_phone_lackey = rdd_phone_lac_time.reduceByKey((x,y)=>x+y) //(18688888888,CompactBuffer((18688888888 16030401EAFB68F1E3CDF819735E1C66,87600), (18688888888 9F36407EAD0629FC166F14DDE7970F68,51200), (18688888888 CC0710CC94ECC657A8561DE549D940E0,1300))) //取top2,mapValues對values操作,返回的是map(K,V),K是原始的K,V是操作後得到的V val rdd_reduce_phone_lackey_groupyed = rdd_reduce_phone_lackey.groupBy(x=>x._1.split(" ")(0)) val rdd_top2 = rdd_reduce_phone_lackey_groupyed.mapValues(x=>{ x.toList.sortBy(_._2).reverse.take(2) }) //(16030401EAFB68F1E3CDF819735E1C66,(18688888888,16030401EAFB68F1E3CDF819735E1C66,87600)) //下面需要與另一個map根據特定的欄位例如16030401EAFB68F1E3CDF819735E1C66進行join,所以需要將‘18688888888 16030401EAFB68F1E3CDF819735E1C66’拆開,將第二個作為K,返回新的map val rdd_result = rdd_top2.flatMap(x=>{ x._2.map(y=>{ val li = y._1.split(" ") (li(1),(li(0),li(1),y._2)) }) }) //該檔案中即是需要與上面的結果進行join val lati_longti = sc.textFile("D:\\lac_info", 1) //(9F36407EAD0629FC166F14DDE7970F68,(116.304864,40.050645)) //對映成如上一行的map val rdd_coordinate = lati_longti.map(f=>{ val li = f.split(",") (li(0),(li(0),li(1),li(2))) }) //進行join //rdd_coordinate 與rdd_result的結構型別已改是一樣的,即K,V的型別對應,否則無法join val join_resultWithcoordinate = rdd_coordinate.join(rdd_result) // rdd_coordinate.to //println(rdd_result.collect().length) //儲存檔案 join_resultWithcoordinate.saveAsTextFile("d:\\dest") sc.stop() } }
樣例資料
D:\\bs_log
18688888888,20160327082400,16030401EAFB68F1E3CDF819735E1C66,1 18611132889,20160327082500,16030401EAFB68F1E3CDF819735E1C66,1 18688888888,20160327170000,16030401EAFB68F1E3CDF819735E1C66,0 18611132889,20160327075000,9F36407EAD0629FC166F14DDE7970F68,1 18688888888,20160327075100,9F36407EAD0629FC166F14DDE7970F68,1 18611132889,20160327081000,9F36407EAD0629FC166F14DDE7970F68,0 18688888888,20160327081300,9F36407EAD0629FC166F14DDE7970F68,0 18688888888,20160327175000,9F36407EAD0629FC166F14DDE7970F68,1 18611132889,20160327182000,9F36407EAD0629FC166F14DDE7970F68,1 18688888888,20160327220000,9F36407EAD0629FC166F14DDE7970F68,0 18611132889,20160327230000,9F36407EAD0629FC166F14DDE7970F68,0 18611132889,20160327180000,16030401EAFB68F1E3CDF819735E1C66,0 18611132889,20160327081100,CC0710CC94ECC657A8561DE549D940E0,1 18688888888,20160327081200,CC0710CC94ECC657A8561DE549D940E0,1 18688888888,20160327081900,CC0710CC94ECC657A8561DE549D940E0,0 18611132889,20160327082000,CC0710CC94ECC657A8561DE549D940E0,0 18688888888,20160327171000,CC0710CC94ECC657A8561DE549D940E0,1 18688888888,20160327171600,CC0710CC94ECC657A8561DE549D940E0,0 18611132889,20160327180500,CC0710CC94ECC657A8561DE549D940E0,1 18611132889,20160327181500,CC0710CC94ECC657A8561DE549D940E0,0 D:\\lac_info 9F36407EAD0629FC166F14DDE7970F68,116.304864,40.050645,6 CC0710CC94ECC657A8561DE549D940E0,116.303955,40.041935,6 16030401EAFB68F1E3CDF819735E1C66,116.296302,40.032296,6 資料結果: (16030401EAFB68F1E3CDF819735E1C66,((16030401EAFB68F1E3CDF819735E1C66,116.296302,40.032296),(18688888888,16030401EAFB68F1E3CDF819735E1C66,87600))) (16030401EAFB68F1E3CDF819735E1C66,((16030401EAFB68F1E3CDF819735E1C66,116.296302,40.032296),(18611132889,16030401EAFB68F1E3CDF819735E1C66,97500))) (9F36407EAD0629FC166F14DDE7970F68,((9F36407EAD0629FC166F14DDE7970F68,116.304864,40.050645),(18688888888,9F36407EAD0629FC166F14DDE7970F68,51200))) (9F36407EAD0629FC166F14DDE7970F68,((9F36407EAD0629FC166F14DDE7970F68,116.304864,40.050645),(18611132889,9F36407EAD0629FC166F14DDE7970F68,54000)))
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31506529/viewspace-2216122/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用CSS最容易出錯的兩大地方!CSS
- 字串篇(python)—兩個字串的最長公共子序列字串Python
- 張小龍:用停留時長衡量一個APP的好壞是錯誤的!APP
- 微信企業付款介面PHP開發需要注意的兩個地方PHP
- Spark SQL | 目前Spark社群最活躍的元件之一SparkSQL元件
- 演算法-兩最長迴文子串演算法
- 中國最愛下雨的地方是哪裡
- Spark的兩種核心Shuffle詳解Spark
- 【個人成長】在家學習的這兩個月
- Spark的Shuffle總結分析Spark
- Spark流教程 :使用 Apache Spark 的Twitter情緒分析SparkApache
- 673. 最長遞增子序列的個數
- 字串最後一個單詞的長度字串
- 但當前地方兩會相繼召開,“穩”字當頭,穩增長政策
- Spark RPC框架原始碼分析(三)Spark心跳機制分析SparkRPC框架原始碼
- 聊聊公眾號最讓我不爽的兩個痛點
- 最近兩個月的招聘統計:只有IT行業最“缺人”行業
- 人機互動:為何我們在同一個地方搞砸了兩次?
- 輸入兩個長度相同的字串,比較兩個數在相同位置的字元是否相同字串字元
- Leetcode 58. 最後一個單詞的長度LeetCode
- 6 個託管 git 倉庫的地方Git
- Spark 原始碼分析系列Spark原始碼
- [原創]兩個樣本分析,兩種程式注入學習
- Spark SQL中列轉行(UNPIVOT)的兩種方法SparkSQL
- 最長
- eMarketer:預計Facebook使用者的每日停留時長將持續減少
- Flume+Spark+Hive+Spark SQL離線分析系統SparkHiveSQL
- 每日一練(38):最後一個單詞的長度
- spark 原始碼分析之十九 -- Stage的提交Spark原始碼
- 基於 Spark 的資料分析實踐Spark
- 編寫js比較兩個數的最大值(使用者依次輸入兩個數,最後彈出最大的那個值)JS
- Python中Lambda使用要注意的幾個地方Python
- 可以買到 Linux 電腦的 10 個地方Linux
- 最長的Hello, World!(Python)Python
- spark 原始碼分析之十八 -- Spark儲存體系剖析Spark原始碼
- spark 原始碼分析之十五 -- Spark記憶體管理剖析Spark原始碼記憶體
- leetcode_58_最後一個單詞的長度_簡單LeetCode
- 【Redis】redis-cluster需要注意的幾個地方Redis