Spark 二次排序實現
Spark二次排序的實現方式,記錄以作備忘
一、測試檔案testsortTwo:
-
[root@tongji ~]# hadoop fs -cat /user/wzx/testsortTwo
-
1444697637.786 180.175.251.34 wv.88mf.com _trackClick 174|139||-17718753 0000436cc2ad45bb8df6a70bd09e146f
-
1444695603.085 218.22.168.122 wv.17mf.com _trackPageview 0002a9ed7d754a08957912700e36d731
-
1444696305.588 106.110.49.210 wv.88mf.com _trackPageview 00034c9597df47b6a3041635334daa3d
-
1444696305.588 221.2.101.146 wv.77mf.com _trackMover 446,650|492,635|520,629 000364344c8649f8bdbf66dba76f8ed1
-
1444695543.619 120.193.187.66 c.mfniu.com _trackPageview 00042d7207ee4eb29d1604c724629182
-
1444697033.836 183.54.102.45 c.mfniu.com _trackPageview 000436b51eb844aa9e002ff62c21168c
-
1444696305.588 58.215.136.139 wv.88mf.com _trackPageview 00051113efbf4ae1a805b2bf262ca26d
- 1444697308.329 61.164.41.227 wv.17mf.com _trackPageview 00054c1620814bfcaeba6a88d6b3c54c
spark程式碼:(先按照第一列排序,再按照第3列排序)
-
val text= sc.textFile("/user/wzx/testsortTwo")
-
val rdd1 = text.map(x => x.split(" ")).map{
-
x =>
-
val len = x.length
-
if(len == 5){
-
(((x(0)),x(2)),(x(1),x(3),x(4)))
-
}else if(len == 6){
-
(((x(0)),x(2)),(x(1),x(3),x(4),x(5)))
-
}else{
-
(((x(0)),x(2)),x(1))
-
}
-
}
- val rdd2 = rdd1.groupByKey().sortByKey()
- rdd2.collect()
-
結果:
-
((1444695543.619,c.mfniu.com),CompactBuffer((120.193.187.66,_trackPageview,00042d7207ee4eb29d1604c724629182))),
-
((1444695603.085,wv.17mf.com),CompactBuffer((218.22.168.122,_trackPageview,0002a9ed7d754a08957912700e36d731))),
-
((1444696305.588,wv.77mf.com),CompactBuffer((221.2.101.146,_trackMover,446,650|492,635|520,629,000364344c8649f8bdbf66dba76f8ed1))),
-
((1444696305.588,wv.88mf.com),CompactBuffer((106.110.49.210,_trackPageview,00034c9597df47b6a3041635334daa3d), (58.215.136.139,_trackPageview,00051113efbf4ae1a805b2bf262ca26d))),
-
((1444697033.836,c.mfniu.com),CompactBuffer((183.54.102.45,_trackPageview,000436b51eb844aa9e002ff62c21168c))),
- ((1444697308.329,wv.17mf.com),CompactBuffer((61.164.41.227,_trackPageview,00054c...
二、測試檔案testsort:
-
wzx 2321
-
admin 462
-
yxy 21323
-
zov 32
-
wzx 123
-
vi 2
-
wzx 3
-
wzx 9
- yxy 223
spark程式碼:
-
val text = sc.textFile("/user/wzx/testsort")
-
val rdd1 = text.map(x => x.split(" ")).map(x => (x(0),x(1).toInt)).groupByKey().sortByKey(true).map(x => (x._1,x._2.toList.sortWith(_>_)))
- rdd1.collect
結果:
- Array((admin,List(462)), (vi,List(2)), (wzx,List(2321, 123, 9, 3)), (yxy,List(21323, 223)), (zov,List(32)))
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29754888/viewspace-1826229/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Spark Shuffle實現Spark
- Spark學習——排序ShuffleSpark排序
- Spark Streaming + Spark SQL 實現配置化ETSparkSQL
- 實現堆排序排序
- Spark的TorrentBroadcast:實現SparkAST
- Spark 原始碼系列(七)Spark on yarn 具體實現Spark原始碼Yarn
- MapReduce 二次排序詳解排序
- php實現 歸併排序,快速排序PHP排序
- GO 實現快速排序Go排序
- js 實現堆排序JS排序
- 快速排序 java實現排序Java
- Swift實現快速排序Swift排序
- java實現快速排序Java排序
- 快速排序(java實現)排序Java
- 堆排序(php實現)排序PHP
- 希爾排序java實現排序Java
- 快速排序的實現排序
- map/reduce實現 排序排序
- 簡單實現二次注入
- Spark 框架安全認證實現Spark框架
- 如何實現Spark on Kubernetes?Spark
- Go實現氣泡排序和快速排序Go排序
- 排序演算法:Java實現希爾排序排序演算法Java
- php實現 氣泡排序,插入排序,選擇排序PHP排序
- go 實現氣泡排序和插入排序Go排序
- 排序演算法之快速排序的實現排序演算法
- 排序圖解:js排序演算法實現排序圖解JS演算法
- go 實現歸併排序Go排序
- 堆排序(實現c++)排序C++
- 陣列排序的實現陣列排序
- 使用 Swift 實現堆排序Swift排序
- Java實現氣泡排序Java排序
- MySQL實現分組排序MySql排序
- 計數排序 -- GoLang實現排序Golang
- Java 實現彙總排序Java排序
- JavaScript實現:插入排序!!!JavaScript排序
- 快速排序三種實現排序
- 堆排序c++實現排序C++