0

我开发了一个代码,它运行一个 map reduce 作业来从 FTP 服务器读取文件并将其写入HDFS. 将文件从 FTP写入HDFS指定的输出目录,将其命名为 part-0000。如果我在 FTP 服务器上有多个文件,我会将它们全部写入HDFS.

为避免这种情况,我计划将文件名作为 key 以及数据作为 value 传递。因此,reducer 将数据放入一个输出文件,其中的键是文件名。

我知道我必须使用outputformatthat extends MultipleTextOutputFormat。我写了如下

 static class MultiFileOutput extends MultipleTextOutputFormat<Text, Text> {

         protected String generateFileNameForKeyValue(Text key, Text value,String name) {
            System.out.println("key is :"+ key.toString());
         System.out.println("value is :"+ value.toString());
            System.out.println("name is :"+ name.toString());

                 return key.toString();
         }

但我未能传递正在处理的输入文件的名称。如何获取输入文件的名称?

map.input.file

FileSystem fs = file.getFileSystem(conf);
                String fileName=fs.getName();

不要返回输入文件的名称。
任何指针?

4

2 回答 2

0

FileStatus在以下代码中使用了对象,因为我的自定义输入格式不会拆分输入文件。它对我来说很好..

 FileSystem fs = file.getFileSystem(conf);
                    FileStatus status= fs.getFileStatus(file);
                    String fileName=status.getPath().toString();
于 2012-12-31T05:37:34.770 回答
0

您可以通过上下文获取输入文件路径。

FileSplit fileSplit = (FileSplit) context.getInputSplit();
String inputFilePath = fileSplit.getPath().toString();

这将给出完整的路径。如果你只想要文件名,你可以这样做:

String inputFileName = fileSplit.getPath().getName();

高温高压

于 2012-12-28T11:00:24.913 回答