我有一个以下情况,我需要读取格式的行
Field1,Field2,Field3,Field4,Field5,Field6#Field1,Field2,Field3
实现这一目标的一种方法是将像KeyValueLineRecordReader
这样的记录读取器与分隔符#
一起使用。但是我将不得不使用String.split
在UDF中的,
上划分键和价值,我认为这可以放慢执行。
1.是否有使用这种类型格式的唱片读者? 2.如果一个这样的唱片作者不存在,我有效地阅读这样的行的替代方法是什么?
输入数据为〜10GB。
您可以在Split
中使用RegexString 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;