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 关注
- 349 浏览
添加回答
举报