录制读取器,可以通过两种分离器分开



我有一个以下情况,我需要读取格式的行

Field1,Field2,Field3,Field4,Field5,Field6#Field1,Field2,Field3

实现这一目标的一种方法是将像KeyValueLineRecordReader这样的记录读取器与分隔符#一起使用。但是我将不得不使用String.split在UDF中的,上划分键和价值,我认为这可以放慢执行。
1.是否有使用这种类型格式的唱片读者? 2.如果一个这样的唱片作者不存在,我有效地阅读这样的行的替代方法是什么?

输入数据为〜10GB。

您可以在Split

中使用Regex
String line = "Field1,Field2,Field3,Field4,Field5,Field6#Field1,Field2,Field3";
String arr [] = line.split(",|#");
for (String s : arr) {
    System.out.println(s);
}

由于您已经用Apache-pig标记了问题,所以我给猪解决方案。将记录加载到1个字段中,用','替换#单个字段。无需Java或任何UDF。

A = LOAD 'input.txt' AS (line:chararray);
B = FOREACH A GENERATE STRSPLIT(REPLACE(line,'#',','),',',9);
DUMP B;

最新更新