我有一个文件,例如c:/aaa+b[1234].res.1.txt,我尝试使用sparkcontext处理它,例如:
...
sc.textFile(filename).cache()
val count = cache.filter(line => line.contains("e")).count()
...
不幸的是,这引发了一个例外:
Input Pattern file:/C:/aaa a+b[1234].abc.1.txt matches 0 files
org.apache.hadoop.mapred.InvalidInputException: Input Pattern file:/C:/aaa a+b[1234].res.1.txt matches 0 files
at org.apache.hadoop.mapred.FileInputFormat.listStatus(FileInputFormat.java:251)
at org.apache.hadoop.mapred.FileInputFormat.getSplits(FileInputFormat.java:270)
这可能是由于文件名中的括号“[”和“]”导致的错误。如果我简化文件名,我会收到结果。如何对文件名进行编码以使请求成功?
2条答案
按热度按时间kpbwa7wx1#
不知何故,我们无法逃避这些:1)“你能从你的fs根使用相对路径吗?我没有在Windows上工作。
2) “[”&“]”我想是因为它们用在正则表达式中。
我有一个“[”,“]”的解决方法:sc.textfile(filename.replace(“[”,”“).replace(“[”,”“).collect()
vddsk6oq2#
好吧,在kirans建议之后,我想出了一个可能的解决方案:
“?”基本上代表任何字符。虽然这在我的用例中可能有效,但我想知道是否有更好的方法,因为很明显,我读了两个文件,而我只想读一个