Hadoop进程文件与不同的字段分隔符

时间:2016-11-24 13:57:35

标签: mapreduce hive apache-pig

在同一文件和非新行行分隔符中处理具有不同字段分隔符的文本文件有哪些选项? 文件中的某些字段可以是固定长度,有些字段可以用字符分隔。

  

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

在此示例中,100是第一个字段值,xyz是第二个字段值,abc是第3个字段值,hello是第四个字段值。 |和@是第3和第4个字段的分隔符。这些行由#。

分隔

任何Map reduce或pig或hive解决方案都可以。

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

2 个答案:

答案 0 :(得分:1)

您可以覆盖记录分隔符并将其设置为#。之后将记录加载为一行,然后替换' |'和' @'带有空格的字符。然后你将把所有字段分隔为' '。使用STRSPLIT获取各个字段。

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;

答案 1 :(得分:0)

您可以使用RegexSerDe

尝试Hive