我的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个代码。
你可以试试:
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
}