Hadoop:在映射器中仅获取一次输入文件名



我是Hadoop的新手,目前正在研究Hadoop。我有一个小问题。

我的

输入文件夹中有大约 10 个文件,我需要传递给我的 map reduce 程序。我希望映射器中的文件名,因为我的文件名包含创建此文件的时间。我看到人们使用FileSplit在映射器中获取文件名。如果假设我的输入文件包含数百万行,那么每次调用映射器代码时,它都会获取文件名,然后从文件中提取时间,这对于同一个文件来说显然是重复耗时的事情。一旦我在映射器中获取时间,我就不必一次又一次地从文件中分配时间。

我怎样才能做到这一点?

您可以使用

Mapper 的 setup 方法来获取文件名,因为setup方法在初始化方法之前只运行一次map()如下所示:

public class MapperRSJ extends Mapper<LongWritable, Text, CompositeKeyWritableRSJ, Text> {
  String filename;
  @Override
  protected void setup(Context context) throws IOException, InterruptedException {
    FileSplit fsFileSplit = (FileSplit) context.getInputSplit();
    filename = context.getConfiguration().get(fsFileSplit.getPath().getParent().getName()));
  }
  @Override
  public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
    // process each key value pair
  }
}

相关内容

  • 没有找到相关文章

最新更新