记录阅读器,可以分为两种分隔符

时间:2017-06-05 04:54:15

标签: java apache-pig user-defined-functions

我有一个案例需要读取格式为

的行的文件
Field1,Field2,Field3,Field4,Field5,Field6#Field1,Field2,Field3

虽然实现这一目标的一种方法是使用像KeyValueLineRecordReader这样的记录阅读器和分隔符#。但我必须使用,在我的UDF中分割String.split上的键和值,我认为这会降低执行速度。
 1.是否有任何记录阅读器提供此类格式?  2.如果一个这样的记录作者不存在,那么我有什么方法可以有效地阅读这样的一行呢?

输入数据约为10GB。

2 个答案:

答案 0 :(得分:0)

您可以在拆分中使用正则表达式

#responsive-menu-container {
    width:100%;
}

答案 1 :(得分:0)

由于您已经使用apache-pig标记了问题,我将提供PIG解决方案。将记录载入1个字段,将#替换为','然后使用STRSPLIT获取各个字段。不需要java或任何UDF。

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