带有不同字段定界符的Hadoop流程文件



在同一文件和非新行行定界线中使用不同字段定界符处理文本文件有哪些选项?文件中的某些字段可以固定长度,有些可以通过字符分开。

示例:
100 xyz | abc@Hello#200 xyz1 | abc1@world

在此示例中,100是第一个字段值,XYZ是第二个字段值,ABC是第三个字段值,Hello是第四个字段值。|@是第三和第四场的定界符。线通过#。

分开

任何地图减少或猪或蜂巢溶液都可以。

一个选项可能是配置自定义行定界符,读取整个行并处理相同的MR。但是任何输入Format都接受自定义定界符?

您可以覆盖记录定界符,然后将其设置为#。将记录加载为行之后,然后替换'|''和"@"字符带有空间。然后,您将获得所有字段。

SET textinputformat.record.delimiter '#'
A = LOAD 'data.txt' AS (line:chararray);
B = FOREACH A REPLACE(REPLACE(line,'|',' '),'@',' ') AS line;-- Note:'\|' if you need to escape '|'
C = FOREACH B GENERATE STRSPLIT(line,' ',4);
DUMP C;

您可以尝试使用Regexserde

尝试Hive