亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據字符串中的特定值進行排序。

根據字符串中的特定值進行排序。

ABOUTYOU 2021-04-06 12:31:11
我有一個內容如下的文件:    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我需要首先基于字段5至8中的值對行進行排序,即7415 0088 1101_003.log,然后基于日志的部件號即741500881101_ 003 .log來獲得如下所示的內容:738500861101_001.log738500861101_002.log738500861101_003.log666500872101_001.log666500872101_002.log666500872101_003.log666500872101_004.log        741500881101_001.log741500881101_002.log741500881101_003.log使用無法獲得任何良好的結果sort。
查看完整描述

2 回答

?
繁星coding

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


查看完整回答
反對 回復 2021-04-16
?
斯蒂芬大帝

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


查看完整回答
反對 回復 2021-04-16
  • 2 回答
  • 0 關注
  • 378 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號