hadoop:只在Map器中获取一次输入文件名

svmlkihl  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(304)

我是hadoop新手,目前正在hadoop上工作。我有一个小问题。
我有大约10个文件在输入文件夹,我需要传递到我的Map减少程序。我希望Map器中的文件名包含创建此文件的时间。我看到有人用filesplit在mapper中获取文件名。如果说我的输入文件包含数百万行,那么每次调用mapper代码时,它都会得到文件名,然后从文件中提取时间,对于同一个文件来说,这显然是一件重复的耗时的事情。一旦我在Map器中得到时间,我就不必一次又一次地从文件中分配时间。
我怎样才能做到这一点?

bqucvtff

bqucvtff1#

你可以用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
  }
}

相关问题