有没有办法在setup方法中获取与当前文件(在hdfs中)相同的文件夹中的文件列表?

时间:2014-07-03 07:13:14

标签: java hadoop mapreduce

我的java hadoop作业获得了一些路径作为输入。我覆盖mapper类中的setup方法,我获取当前文件的路径:

((FileSplit) context.getInputSplit()).getPath().toString();

有没有办法在安装方法中获取与当前文件(在hdfs中)相同的文件夹中的文件列表?

更确切地说,我需要处理以下情况:文件夹包含一组文件,每个文件都包含一些代码,例如:

fileName_somecode1.txt fileName_somecode2.txt ... fileName_somecoden.txt

在mapper开始工作之前,我需要读取文件夹中的所有文件,收集所有代码,然后在需要处理当前文件时做出决定。

让我们看一下简单的例子:

test_1.txt test_2.txt test_3.txt

我需要跳过所有文件,如果存在的代码多于当前代码,那么在这个玩具示例中应该跳过test_2.txt,因为有1和3个代码。

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

Path file = ((FileSplit) context.getInputSplit()).getPath();
Path folder = file.getParent();
Configuration conf = context.getConfiguration();
FileSystem fs = FileSystem.get(folder.toUri(), conf);
FileStatus[] statuses = fs.listStatus(folder); // get list of files in folder
for (FileStatus status : statuses) {
    Path f = status.getPath();
    // process file f
}