gpt4 book ai didi

hadoop - 将MapReduce作业的part-0000文件命名为hadoop中的输入文件

转载 作者:行者123 更新时间:2023-12-02 21:55:55 25 4
gpt4 key购买 nike

我已经开发了一个代码,该代码运行一个map reduce作业,以从FTP服务器读取文件并将其写入HDFS。它将文件从FTP写入HDFS,并将文件命名为part-0000。如果我在FTP服务器上有多个文件,则将它们全部写入HDFS的那个部分0000文件中。

为了避免这种情况,我计划将文件名作为键以及数据作为值传递。因此,Reducer将数据作为关键字输入到输出文件中。

我了解我必须使用扩展了outputformatMultipleTextOutputFormat。我写了如下

 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();

不返回输入文件的名称。
有指针吗?

最佳答案

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

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

这将给出完整的路径。如果只需要文件名,则可以执行以下操作:
String inputFileName = fileSplit.getPath().getName();

高温超导

关于hadoop - 将MapReduce作业的part-0000文件命名为hadoop中的输入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14066863/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com