2 回答

TA貢獻1797條經驗 獲得超4個贊
您可以sort
在以下選項中使用命令wit:
sort -n -k1.5,1.8 -n -k1.14,1.16 fileToSort.log
選項:
-n
用于數字排序-k1.5,1.8
并-k1.14,1.16
定義您的排序鍵
例子:
$ sort -n -k1.5,1.8 -n -k1.14,1.16 fileToSort
738500861101_001.log
738500861101_002.log
738500861101_003.log
666500872101_001.log
666500872101_002.log
666500872101_003.log
666500872101_004.log
741500881101_001.log
741500881101_002.log
741500881101_003.log

TA貢獻1827條經驗 獲得超8個贊
在學習SPARK的過程中,我解決了這個問題。我不是UNIX shell程序員。因此想到了用火花解決問題
val logList = Array("666500872101_002.log","738500861101_003.log","738500861101_002.log","666500872101_001.log","741500881101_001.log","738500861101_001.log","741500881101_002.log","666500872101_003.log","741500881101_003.log","666500872101_004.log")
val logListRDD = sc.parallelize(logList)
logListRDD.map(x=>((x.substring(4,8), x.slice(x.indexOfSlice("_") +1, x.indexOfSlice("."))),x)).sortByKey().values.collect.take(20)
輸出:
Array [String] = Array(738500861101_001.log,738500861101_002.log,738500861101_003.log,666500872101_001.log,666500872101_002.log,666500872101_003.log,666500872101_004.log,741500881101_001.log,741500881101_1500.002
解釋我做了什么
sc.parallelize(logList) -是創建RDD的步驟,該RDD是spark的核心組件。
map(x =>(((x.substring(4,8),x.slice(x.indexOfSlice(“ _”)+1,x.indexOfSlice(“?!保?,x)) -這將提取內容從Array生成鍵值對。在我們的例子中,value是***。log值,鍵是我們要排序的子字符串數組(0086,001)。KeyValue對將看起來像[(0086,001),738500861101_001.log]
sortByKey() -根據上面生成的Key對數據進行排序
values-獲取與鍵對應的值
collect.take(20) ->在屏幕上顯示o / p
- 2 回答
- 0 關注
- 378 瀏覽
添加回答
舉報