给定一个正则表达式和一个hdfs目录,我需要列出所有与正则表达式所在行匹配的文件名。我正在尝试使用apache spark。语言斯卡拉优选。
我需要这种格式的返回值:
List <Map <文件名:字符串,List <行:字符串>>>
通过以下方法,我可以列出所有文件名。
val files = sc.wholeTextFiles(dirPath)
val regexpr = regex.r
var filter = files.filter{case(filename, content) => regexpr.findAllIn(content).length > 0 }
但是我无法获取正则表达式发生的确切行。
SparkContext.wholeTextFiles
返回一个RDD,其中每个文件的内容表示为单个字符串。如果您想将其分解成几行,则必须自己完成,例如:
val files = sc.wholeTextFiles(dirPath)
val regexpr = regex.r
var filter = files
.mapValues(content => content.split('\n')) // break each file into lines
.mapValues(lines => lines.filter(l => regexpr.findFirstIn(l).isDefined))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句