Scala Spark处理带有特殊字符的文件

时间:2016-10-19 14:33:58

标签: scala apache-spark filenames

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

可能这是错误是由括号" ["和"]"在文件名中。如果我简化文件名,我会收到结果。如何编码文件名以接替请求?

3 个答案:

答案 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("]","?"))

'?'基本上代表任何角色。虽然这可能在我的用例中有用,但我想知道是否有更好的东西,因为很明显可能会发生我读两个文件,我只想读一个