如何将多个部分文件提供给Path

时间:2014-06-02 07:33:59

标签: hadoop path mapreduce

我正在尝试将多个部分文件作为路径。

out 
 |
 |__ part-r-00000
 |__ part-r-00001
 |
 |__ ...
 |
 |__ ...

如何将其作为路径?

Path getall = new Path(____);

请建议

更新

正如Alexey Shestakov建议我做的那样

Path more = new Path("out");
String line2 = null;
Path pathPattern = new Path(more, "part-r-*");
FileStatus [] list = fs.globStatus(pathPattern);
 for (FileStatus status : list) {
    BufferedReader bf21 = new BufferedReader(new InputStreamReader(fs.open(pathPattern)));
     while ((line2 = bf21.readLine()) != null) {
             System.out.println("Line "+line2);
       }
 }

但显示

java.lang.Exception: java.io.FileNotFoundException: File out/part-r-* does not exist.
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:354)
Caused by: java.io.FileNotFoundException: File out/part-r-* does not exist.

我有一个名为out的文件夹,其中包含part-r-00000 and part-r-00001 当我给出

时,我能够阅读它
 Path pathPattern = new Path("out/part-r-0000");

我仍然无法读取特定文件夹中的所有部分文件。

2 个答案:

答案 0 :(得分:0)

如果你想这样做,你必须为2个文件创建2个不同的路径:

Path p0 = new Path("/out/part-r-00000");
Path p1 = new Path("/out/part-r-00001");

所以你可以这样做:

Path p2 = new Path(p0,p1);

我猜你想做什么?

答案 1 :(得分:0)

  1. 您可以在路径名中使用通配符,例如new Path("/out/part-r-*")new Path("/out/part-r-?????")。要获取满足给定名称的所有路径,可以使用方法globStatus
  2. 如果您想使用map reduce作业处理这些文件,那么您可以将new Path("/out")作为输入路径。