2016-05-31 5 views

ответ

8

В картографе при чтении файла, данные считываются в качестве ключевого значения пара. Ключ - это смещение байта, где начинается следующая строка. Для строки 1 она всегда равна нулю. Поэтому в функции картографа выполните следующие действия:

@Override 
    public void map(LongWritable key, Text value, Context context) throws IOException { 
     try { 
      if (key.get() == 0 && value.toString().contains("header") /*Some condition satisfying it is header*/) 
       return; 
      else { 
       // For rest of data it goes here 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    }  
+0

Спасибо, что я использовал то же самое после многих попыток !! – Kunal

+0

Я думаю, что 'keys == 0' должно быть' keys.get() == 0'. Поскольку LongWritable нельзя сравнивать с int напрямую. Поправьте меня, если я ошибаюсь. – yusong

+0

Yup. Необходимо использовать 'get()'. Благодаря! @yusong – ViKiG

1

Поскольку файл может храниться в нескольких узлах, мы не можем сказать, в какой машине присутствует часть заголовка, а какой обработчик обрабатывает эту часть файла. Мы можем отфильтровать заголовок в самом Mapper. Для этого вам нужно знать заголовки. Например, Строка [] cols = line.tokenize(); если (перевалы [0] .equals ("заголовок")) {// пропустить } еще {// испускает }

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