gpt4 book ai didi

java - Hadoop 多输出

转载 作者:可可西里 更新时间:2023-11-01 16:34:42 25 4
gpt4 key购买 nike

我写了一些hadoop代码来读取映射文件并将其分成 block 并将其写入许多文件,如下所示:

public void map(LongWritable key, Text value, OutputCollector<IntWritable, Text> 
output,Reporter reporter) throws IOException {
String line = value.toString();
int totalLines = 2000;
int lines = 0;
int fileNum = 1;
String[] linesinfile = line.split("\n");
while(lines<linesinfile.length) {
// I do something like, if lines = totalLines, {
output.collect(new IntWritable(fileNum), new
Text(linesinfile[lines].toString()));
fileNum++;
lines = 0;
}
lines++;
}
}

在 reduce 中,我这样做:

public void reduce(IntWritable key, Iterator<Text> values,
OutputCollector<IntWritable, Text> output, Reporter reporter) throws IOException {
while(values.hasNext()){
output.collect(key, values.next());
}
}

我的MultiFile类如下:

public class MultiFileOutput extends MultipleTextOutputFormat<IntWritable, Text> {

protected String generateFileNameForKeyValue(IntWritable key, Text content, String
fileName) {
return key.toString() + "-" + fileName;
}
}

总的来说,我说:

    conf.setInputFormat(TextInputFormat.class);
conf.setOutputFormat(MultiFileOutput.class);

除了设置 OutKey/Value Class 等。

我做错了什么?我的输出目录总是空的。

谢谢

最佳答案

程序看起来有点复杂。如果目的是将文件拆分为多个文件,则可以通过多种方式完成。不需要 Map 和 Reduce 作业,只需一个 Map 作业就足够了。

  • 使用 o.a.h.mapred.lib.NLineInputFormat 从输入中一次读取 N 行到映射器,然后将这 N 行写入文件。

  • 在上传文件时将dfs.blocksize设置为所需的文件大小,然后每个mapper将处理一个InputSplit,该InputSplit可以写入文件。

关于java - Hadoop 多输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8335217/

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