Я скопировал один файл с 10 миллионами строк в HDFS. Необходимо обработать строку с номером от 5000 до 500000 в маппере. Как мне это сделать?
Я попытался переопределить метод run() в картографе и попытался использовать счетчик. Но когда файл разделен и работает несколько преобразователей, конечно же, работает несколько счетчиков. Так что это не помогает. Вставка кода ниже.
@Override
public void run(Mapper<LongWritable, Text, Text, Text>.Context context)
throws IOException, InterruptedException {
setup(context);
Integer counter = 0;
while (context.nextKeyValue()) {
LongWritable currentKey = context.getCurrentKey();
Text currentValue = context.getCurrentValue();
System.out.println(currentKey.toString());
map(currentKey, currentValue, context);
counter++;
}
System.out.println("Counter: " + counter + " Time: "
+ System.currentTimeMillis());
}
Кроме того, КЛЮЧ, который я получаю в картографе, - это не номер строки, а смещение строки. Можем ли мы получить КЛЮЧ, указывающий на номер строки? Если да, то будет ли он уникальным для нескольких картографов? (текущий KEY, смещение, не уникален среди картографов).
Как я могу сделать это правильно?