当前位置: 首页 > 知识库问答 >
问题:

如何在mapreduce中从reducer输出中删除r-00000扩展

公良云
2023-03-14

我能够正确地重命名我的reducer输出文件,但r-00000仍然存在。我在我的减速机课上使用了多次输出。以下是这方面的细节。不确定我错过了什么或者我还需要做什么?

public class MyReducer extends Reducer<NullWritable, Text, NullWritable, Text> {

    private Logger logger = Logger.getLogger(MyReducer.class);
    private MultipleOutputs<NullWritable, Text> multipleOutputs;
    String strName = "";
    public void setup(Context context) {
        logger.info("Inside Reducer.");
        multipleOutputs = new MultipleOutputs<NullWritable, Text>(context);
    }
    @Override
    public void reduce(NullWritable Key, Iterable<Text> values, Context context)
            throws IOException, InterruptedException {

        for (Text value : values) {
            final String valueStr = value.toString();
            StringBuilder sb = new StringBuilder();
            sb.append(strArrvalueStr[0] + "|!|");
            multipleOutputs.write(NullWritable.get(), new Text(sb.toString()),strName);
        }
    }

    public void cleanup(Context context) throws IOException,
            InterruptedException {
        multipleOutputs.close();
    }
}

共有2个答案

束建章
2023-03-14

解决这个问题的一个更合适的方法是更改OutputFormat。

例如:-如果您使用的是TextOutputFormatClass,只需获取TextOutputFormat类的源代码并修改以下方法以获得正确的文件名(不带r-00000)。然后我们需要在驱动程序中设置修改后的输出格式。

public synchronized static String getUniqueFile(TaskAttemptContext context, String name, String extension) {
    /*TaskID taskId = context.getTaskAttemptID().getTaskID();
    int partition = taskId.getId();*/
    StringBuilder result = new StringBuilder();
    result.append(name);        
    /*
     * result.append('-');
     * result.append(TaskID.getRepresentingCharacter(taskId.getTaskType()));
     * result.append('-'); result.append(NUMBER_FORMAT.format(partition));
     * result.append(extension);
     */
    return result.toString();
}

因此,无论通过多个输出传递什么名称,都将根据它创建文件名。

东方辉
2023-03-14

我能够在工作完成后明确地做这件事,这对我来说没问题。工作没有延误

if (b){
            DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HHmm");
            Calendar cal = Calendar.getInstance();
            String strDate=dateFormat.format(cal.getTime());
            FileSystem hdfs = FileSystem.get(getConf());
            FileStatus fs[] = hdfs.listStatus(new Path(args[1]));
            if (fs != null){ 
                for (FileStatus aFile : fs) {
                    if (!aFile.isDir()) {
                        hdfs.rename(aFile.getPath(), new Path(aFile.getPath().toString()+".txt"));
                    }
                }
            }
        }
 类似资料:
  • 在我的MapReduce代码中,在reducer端,我实现了,并将inputsplit附加到它。我希望输出文件名作为keyvalue,而不是。如何删除尾随值。下面是我的代码。

  • 我正在尝试读取配置为Avro格式的map reduce函数的结果,但我不能。 part-00000文件的头部看起来像这样: 0 等等(左边的数字在文件中!!)。 我怎么能读这个文件?

  • 我有一些脚本,产生与颜色输出,我需要删除ANSI代码。 输出为(在日志文件中): 我不知道如何把ESC字符放在这里,所以我把放在它的位置。 我把剧本改成: 但是现在它给我(在日志文件中): 我怎样才能删除这个'? 也许有一种方法可以完全禁用整个脚本的着色?

  • 我只是使用3机器集群测试单词计数示例。我的代码与此示例相同,但以下代码除外:

  • 问题内容: 在成功的调用中,我获得了带有键“ objects”的JSONArray,再次是带有键“ name”的testValue。输出为: 我的代码如下: 想要按以下方式打印名称:(不带双引号) 问题答案: 1. .replaceAll() 此方法将替换您名字中出现的所有双引号,而不是第一个和最后一个。 示例:“ Abcd”变为Abcd,但如果名称为“ Ab” cd“,则根据您的要求应为Ab”

  • 本文向大家介绍如何从R数据框中删除空行?,包括了如何从R数据框中删除空行?的使用技巧和注意事项,需要的朋友参考一下 在调查或任何其他数据收集媒介期间,无法从所有单位获取所有信息。有时我们得到部分信息,有时什么也没有。因此,数据中的某些行可能完全为空白,而某些行可能具有部分数据。可以删除空白行,并使用有助于处理缺失信息的方法填充其他空值。 示例 考虑下面的数据框,它缺少一些行和一些值- 在这里,我们