我有一个文件,如C:/ aaa a + 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)
可能这是错误是由括号" ["和"]"在文件名中。如果我简化文件名,我会收到结果。如何编码文件名以接替请求?
答案 0 :(得分:0)
添加绝对路径并尝试。
sc.textFile("/home/aptus/Desktop/aaa a+b[1234].res.1.txt").cache()
答案 1 :(得分:0)
不知何故,我们无法摆脱这些: 1)“:”你可以使用FS根的相对路径吗?我没有在Windows上工作。
2)“[”& “]”我认为因为它们用于正则表达式。
我为“[”,“]”解决了这个问题: sc.textFile(filename.replace( “[”, “”)。代替( “[”, “”))。收集()
答案 2 :(得分:0)
好的,在Kirans建议之后我想出了一个可能的解决方案:
sc.textFile(filename.replace("[","?").replace("]","?"))
'?'基本上代表任何角色。虽然这可能在我的用例中有用,但我想知道是否有更好的东西,因为很明显可能会发生我读两个文件,我只想读一个