我是hadoop的新手,目前正在研究hadoop.我有一个小问题.
我在输入文件夹中有大约10个文件,我需要传递给我的map reduce程序.我希望我的mapper中的文件名为,因为我的fileName包含创建此文件的时间.我看到有人使用FileSplit在mapper中获取文件名.如果说我的输入文件包含数百万行,那么每次调用映射器代码时,它都会获得文件名,然后从文件中提取时间,这对于同一个文件来说显然是一个重复的耗时.一旦我在映射器中得到时间,我就不必一次又一次地从文件中分配时间.
我怎样才能做到这一点?
您可以使用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
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2776 次 |
| 最近记录: |