用于加载任意白色间隔分隔文件的最佳代码

时间:2013-02-12 00:28:21

标签: apache-pig

我想知道是否有人可以提供以下改进。

我遇到了白色空格分隔文件的数量和类型 空白分隔符可以从行到行甚至之间变化 一行中的字段,如下所示:

whiteSpaceDelimitedFields.txt:

f11     f12 f13 ...
f22 f22  f23 ...
f32  f32    f33 ...

对于这个白色空间的一般情况,我使用以下PIG代码片段 (如下面的输出所示):

grunt> A = LOAD 'whiteSpaceDelimitedFields.txt' USING TextLoader() AS (line:chararray);
grunt> B = FOREACH A GENERATE FLATTEN(STRSPLIT(line, '\\s+')) AS (f0:type, f1:type, ...);
grunt> DUMP B;

(f11,f12,f13)
(f22,f22,f23)
(f32,f32,f33)
grunt>

我认为这种转换发生在map()方法中(与Record Reader中的动态相反 - 虽然我不确定);但无论如何,对于这种常见情况,是否有PIG改善?也许是装载机建议?

提前致谢

1 个答案:

答案 0 :(得分:2)

如果您不想创建自定义加载器,可以查看Piggybank的MyRegExLoader

REGISTER '/my_pig_home/contrib/piggybank/java/piggybank.jar'
A = LOAD 'data.txt' USING org.apache.pig.piggybank.storage.MyRegExLoader(
  '(\\S+)\\s+(\\S+)\\s+(\\S+)') as 
  (field1:chararray, field2:chararray, filed3:chararray);

dump A;
(f11,f12,f13)
(f22,f22,f23)
(f32,f32,f33)