我的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个代码。
答案 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
}