如何使用Pig处理平面文件?例如,如果您有一行包含前四个位置为年份的记录,则接下来的5个是产品代码,最后8个包含MSRP,您将如何使用Pig查询此数据?我可能遗漏了一些简单的东西,但到目前为止我发现的所有内容都需要在使用Pig加载数据时使用分隔符。
下面提供了一些示例数据:
1999ABCDE12234.00
2000DCEFS00020.00
2012FFEWS00005.55
提前致谢。
杰里米
答案 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