2014-11-14 3 views
2

Я новичок в hadoop и в настоящее время работает над hadoop. У меня небольшой запрос.Hadoop: Получение имени входного файла в картографе только один раз

У меня есть около 10 файлов в папке ввода, которые мне нужно передать моей программе уменьшения карты. Я хочу, чтобы имя файла в моем mapper, так как мое имя_файла содержит время создания этого файла. Я видел людей, использующих FileSplit, чтобы получить имя файла в mapper. Если допустим, что мои входные файлы содержат миллионы строк, то каждый раз, когда будет вызываться код карты, он получит имя файла, а затем извлечет время из файла, что, очевидно, повторяет много времени для одного и того же файла. Как только я получаю время в картографе, мне не нужно снова и снова назначать время из файла.

Как я могу это достичь?

ответ

5

Вы можете использовать setup методы Mapper, чтобы получить имя файла, так как setup метода gaurenteed запустить только один раз перед 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 
    } 
} 
+0

Благодаря его worrked. – Nipun

Смежные вопросы