具有不同字段分隔符的 Hadoop 进程文件
Hadoop process file with different field delimiters
处理同一文件中具有不同字段定界符且非新行行定界符的文本文件有哪些选项?
文件中有些字段可以是固定长度的,有些可以用一个字符分隔。
Example:
100 xyz |abc@hello#200 xyz1 |abc1@world
本例中,100为第一个字段值,xyz为第二个字段值,abc为第三个字段值,hello为第四个字段值。 |和@ 是第 3 个和第 4 个字段的分隔符。这些行由#.
分隔
任何 Map reduce 或 pig 或 hive 解决方案都可以。
一个选项可能是配置自定义行分隔符的 MR,读取整行并进行相同的处理。但是任何 InputFormat 都接受自定义分隔符?
您可以使用 RegexSerDe 尝试 Hive
您可以覆盖记录分隔符并将其设置为#。之后将记录作为一行加载,然后替换“|”和带有 space.Then 的 '@' 字符,您将获得由 ' ' 分隔的所有字段。使用 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;
处理同一文件中具有不同字段定界符且非新行行定界符的文本文件有哪些选项? 文件中有些字段可以是固定长度的,有些可以用一个字符分隔。
Example:
100 xyz |abc@hello#200 xyz1 |abc1@world
本例中,100为第一个字段值,xyz为第二个字段值,abc为第三个字段值,hello为第四个字段值。 |和@ 是第 3 个和第 4 个字段的分隔符。这些行由#.
分隔任何 Map reduce 或 pig 或 hive 解决方案都可以。
一个选项可能是配置自定义行分隔符的 MR,读取整行并进行相同的处理。但是任何 InputFormat 都接受自定义分隔符?
您可以使用 RegexSerDe 尝试 Hive
您可以覆盖记录分隔符并将其设置为#。之后将记录作为一行加载,然后替换“|”和带有 space.Then 的 '@' 字符,您将获得由 ' ' 分隔的所有字段。使用 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;