读取输入textFiles的列表,其中单个文件名包含逗号

时间:2018-05-23 19:14:11

标签: scala apache-spark

我在HDFS上有一个文件夹,无论出于何种原因,它包含名称中包含逗号的部分文件。例如

hdfs://namespace/mypath/1-1,123
hdfs://namespace/mypath/1-2,124
hdfs://namespace/mypath/1-3,125

问题是,我想一次只读取一些部分文件,以防止我的群集过载,这意味着我想阅读1-1,1231-2,124个文件。

然而,当路径被送到火花时:

sc.textFile("hdfs://namespace/mypath/1-1,123,hdfs://namespace/mypath/1-2,124")

Spark显然似乎只是在","上进行了标记,因此我假设我正在寻找4个单独的文件。

  • 有没有办法逃避路径中的逗号?
  • 是重命名源文件的唯一选项吗?

1 个答案:

答案 0 :(得分:0)

使用文件名遍历,假设这会为您提供唯一的文件:

sc.textFile("hdfs://namespace/mypath/1-1?123,hdfs://namespace/mypath/1-2?124")

如果您只想要其中一个而不是其他两个,则不起作用:

hdfs://namespace/mypath/1-1,123,hdfs
hdfs://namespace/mypath/1-1:123,hdfs
hdfs://namespace/mypath/1-1.123,hdfs

我打算提出这个建议:

sc.textFile("hdfs://namespace/mypath/1-1[,]123, ...

我认为这应该可行。查看org.apache.hadoop.mapred.FileInputFormat#getPathStrings的代码虽然使我感到怀疑。看起来该函数专门在花括号内查找逗号,如果在[,]内添加逗号,该函数将失败。