2016-03-15 1 views
0

Я пытаюсь использовать Cascading для чтения разделителя разделенного файла и попытки прочитать определенное поле.Каскадирование - как прочитать разделитель разделенного файла и получить определенное значение поля

Пример кода: Содержание

FileTap inTap = new FileTap(new TextDelimited(true, ","), "C://Users//user//Desktop//test//file.txt"); 

Файл:

name,age,email 

Как я получаю только name поле из всех записей?

Обновление: Я пытаюсь достичь этого, используя классы Cascading API.

+0

@ Chris311: Я пытаюсь сделать это с помощью каскадных таблиц Классы API не с Plain Java. – Shankar

ответ

0

Вы должны использовать TextLine схему вместо схемы TextDelimited,

new Hfs(new cascading.scheme.hadoop.TextLine(asSourceFields), filePath, SinkMode.REPLACE); 

После прочтения строки из этого источника крана, вы должны использовать cascading.operation.Function разделить линию и создать кортеж, который содержит только поле «имя».

Вот пример,

public class SplitLine extends BaseOperation implements Function { 

    public SplitLine() { 
     super(1, new Fields("name")); 
    } 

    @Override 
    public void operate(FlowProcess flowProcess, FunctionCall functionCall) { 
     TupleEntry arguments = functionCall.getArguments(); 

     String line = arguments.getString(0); 
     String[] tokens = line.split("\t"); 

     // Check that the split worked as assumed. 
     if (tokens.length == 3) { 
      Tuple output = new Tuple("name"); 
      output.set(0, tokens[0]); 

      functionCall.getOutputCollector().add(output); 
     } 
    } 
} 
+0

Спасибо за подробный ответ. – Shankar

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