用猪处理平面文件

时间:2012-10-06 17:56:18

标签: apache-pig

如何使用Pig处理平面文件?例如,如果您有一行包含前四个位置为年份的记录,则接下来的5个是产品代码,最后8个包含MSRP,您将如何使用Pig查询此数据?我可能遗漏了一些简单的东西,但到目前为止我发现的所有内容都需要在使用Pig加载数据时使用分隔符。

下面提供了一些示例数据:

1999ABCDE12234.00
2000DCEFS00020.00
2012FFEWS00005.55

提前致谢。

杰里米

3 个答案:

答案 0 :(得分:4)

根据位置分割线条的一种方法是使用REGEX_EXTRACT_ALL

E.g:

A = LOAD 'flat.txt' as (line:chararray);
B = FOREACH A GENERATE FLATTEN(REGEX_EXTRACT_ALL(line, 
      '^(.{1,4})(.{1,5})(.*)$')) AS (year:int, prod_code:chararray, msrp:double);
dump B;
(1999,ABCDE,12234.00)
(2000,DCEFS,00020.00)
(2012,FFEWS,00005.55)

答案 1 :(得分:1)

还有一个内置的SUBSTRING函数,

A = LOAD 'flat.txt' as (line:chararray);

B = FOREACH A GENERATE SUBSTRING(line,0,3),SUBSTRING(line,4,8),SUBSTRING(line,9,16);

dump B;

答案 2 :(得分:0)

以前的答案都很棒。此外,如果输入字符串很复杂或需要条件解析,则可以实现自己的UDF