级联 - 如何读取分隔符分隔文件并获取特定字段值

时间:2016-03-15 12:15:38

标签: java cascading

我正在尝试使用Cascading读取分隔符分隔文件并尝试读取特定字段。

代码示例:

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

文件内容:

name,age,email

如何从所有记录中仅获取name字段?

更新:我正在尝试使用级联API类实现此目的。

1 个答案:

答案 0 :(得分:0)

您应该使用TextLine Scheme而不是TextDelimited Scheme,

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);
        }
    }
}