java—可由两种分隔符拆分的记录读取器

pinkon5k  于 2021-06-24  发布在  Pig
关注(0)|答案(2)|浏览(323)

我有一个案例,我需要读取文件的行格式

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

而实现这一点的一种方法是使用像 KeyValueLineRecordReader 带分离器 # . 但我得把钥匙和价值分开 , 在我的自定义项中使用 String.split 我觉得这会减缓执行速度。
1有这种格式的唱片阅读器吗?2如果一个这样的唱片作者不存在,我有什么办法可以有效地阅读这样一行呢?
输入数据约为10gb。

3b6akqbq

3b6akqbq1#

您可以在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);
}
nnvyjq4y

nnvyjq4y2#

因为您已经用apache pig标记了这个问题,所以我将给出一个pig解决方案。将记录加载到1个字段中,用''替换#,然后使用strsplit获取各个字段。不需要java或任何udf。

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

相关问题