带有特殊字符的scala spark句柄文件

bd1hkmkf  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(407)

我有一个文件,例如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)

这可能是由于文件名中的括号“[”和“]”导致的错误。如果我简化文件名,我会收到结果。如何对文件名进行编码以使请求成功?

kpbwa7wx

kpbwa7wx1#

不知何故,我们无法逃避这些:1)“你能从你的fs根使用相对路径吗?我没有在Windows上工作。
2) “[”&“]”我想是因为它们用在正则表达式中。
我有一个“[”,“]”的解决方法:sc.textfile(filename.replace(“[”,”“).replace(“[”,”“).collect()

vddsk6oq

vddsk6oq2#

好吧,在kirans建议之后,我想出了一个可能的解决方案:

sc.textFile(filename.replace("[","?").replace("]","?"))

“?”基本上代表任何字符。虽然这在我的用例中可能有效,但我想知道是否有更好的方法,因为很明显,我读了两个文件,而我只想读一个

相关问题