gpt4 book ai didi

hadoop - 确定 block 属于Hadoop中的哪个文件路径

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

我的工作有多个输入路径。例如:

    //Driver.class
for (String s : listFile) {
MultipleInputs.addInputPath(job, new Path(s), SequenceFileInputFormat.class);// ex: /home/path1, /home/path2, ...
}
.....
//Mapper.class
public void map(Text key, Data bytes, Context context) throws IOException, InterruptedException {
.....
}
我的问题是,有什么方法可以确定map()函数中的当前对(键,值)属于哪个文件?

最佳答案

由于您将SequenceFileInputFormat用作InputFormat,因此SequenceFileInputFormatSequenceFileRecordReader用作其RecordReader,并扩展了FileInputFormat,其方法getSplits()返回拥有FileSplitPath,当然SequenceFileRecordReader可以获取Path。因此,您需要做的是,当您获得keyvalue时,使其中之一包含Path,这需要在RecordReader中进行。

步骤如下:

  • 制作一个自定义valClass,其中包含original valuepath:
    class YourValClass implements Writable {
    Writable value; // your orginal value
    Path path; // the path you want
    }
  • 使自定义InputFormat类扩展SequenceFileInputFormat,并覆盖createRecordReader()方法以返回到自定义RecordReader:
    class YourInputputFormat extends SequenceFileInputFormat<YourKeyClass, YourValClass> {

    @Override
    public RecordReader<YourKeyClass, YourValClass> createRecordReader(InputSplit split, TaskAttemptContext context) throws IOException {
    return new YourRecordReader(); // return your custom RecordReader
    }
    }
  • 进行自定义RecordReader,在其中您可以将valuepath结合在一起:
    class YourRecordReader extends SequenceFileRecordReader<YourKeyClass, YourValClass> {
    Path path;

    @Override
    public void initialize(InputSplit inputSplit, TaskAttemptContext taskAttemptContext) throws IOException, InterruptedException {
    super.initialize(inputSplit, taskAttemptContext);
    FileSplit fileSplit = (FileSplit) inputSplit;
    this.path = fileSplit.getPath(); // assign the path
    }

    @Override
    public YourValClass getCurrentValue() {
    YourValClass val = super.getCurrentValue();
    if (null != val) {
    val.path = path; // set the path
    }
    return val;
    }
    }

  • 现在,您可以从 path值获取 YourValClass

    关于hadoop - 确定 block 属于Hadoop中的哪个文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36910160/

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