我在HDFS上有一个文件夹,无论出于何种原因,它包含名称中包含逗号的部分文件。例如
hdfs://namespace/mypath/1-1,123
hdfs://namespace/mypath/1-2,124
hdfs://namespace/mypath/1-3,125
问题是,我想一次只读取一些部分文件,以防止我的群集过载,这意味着我想阅读1-1,123
和1-2,124
个文件。
然而,当路径被送到火花时:
sc.textFile("hdfs://namespace/mypath/1-1,123,hdfs://namespace/mypath/1-2,124")
Spark显然似乎只是在","
上进行了标记,因此我假设我正在寻找4个单独的文件。
答案 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
的代码虽然使我感到怀疑。看起来该函数专门在花括号内查找逗号,如果在[,]内添加逗号,该函数将失败。