невозможно токенизировать данные файла

Я новичок в hadoop и mapreduce. В картографе я собираюсь токенизировать эти данные из текстового файла в указанном ниже формате с первыми несколькими строками.

9593C58F7C1C5CE4    970916072134    levis
9593C58F7C1C5CE4    970916072311    levis strause & co
9593C58F7C1C5CE4    970916072339    levis 501 jeans
45531846E8E7C127    970916065859    
45531846E8E7C127    970916065935    
45531846E8E7C127    970916070105    "brazillian soccer teams"
45531846E8E7C127    970916070248    "brazillian soccer"
45531846E8E7C127    970916071154    "population of maldives"
082A665972806A62    970916123431    pegasus
F6C8FFEAA26F1778    970916070130    "alicia silverstone" cutest crush batgirl babysitter clueless 
945FF0D5996FD556    970916142859    mirc

С помощью String Tokenizer я не могу разделить эти данные, он путает машину с получением данных из этого файла. Есть ли какая-либо альтернатива для этой проблемы, кроме String.split()


person Hanry    schedule 23.07.2012    source источник


Ответы (2)


@ Hanry: Почему бы вам не использовать тот же java StringTokenizer. Все, что вам нужно сделать, это токенизировать пространство, получить общее количество токенов, а затем выполнить итерацию и использовать первый и второй токены как таковые и объединить последующие токены в третью строку.

person Arun A K    schedule 24.07.2012

Вы можете использовать TextInputFormat для получения каждой строки за раз, тогда, если это действительно формат фиксированной ширины и у вас есть постоянное количество полей (3), вы можете сделать что-то вроде:

Text token1 = new Text();
Text token2 = new Text();
Text token3 = new Text();

protected void map(LongWritable key, Text value, Context context) {
    // 0123456789012345678901234567890123456789
    //           1         2         3
    // 9593C58F7C1C5CE4    970916072134    levis

    if (value.getLength() >= 37) {
      token1.set(value.getBytes(), 0, 16);
      token2.set(value.getBytes(), 20, 12);
      token3.set(value.getBytes(), 26, value.getLength() - 26);

      // TOFO: Do something with these tokens
    } else {
      // TODO: handle bad record length
    }
}

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: полностью не проверено

person Chris White    schedule 24.07.2012