2016-03-06 46 views
0

当我尝试file.txt的加载猪猪我收到以下错误:用管道连接管将数据加载到Pig | - |分隔符

pig script failed to validate: java.lang.RuntimeException: could not instantiate 'PigStorage' with arguments '[\|-\|]' 

从文件中的样本行是:

文本| - |文| - |文本

我使用下面的命令:

bag = LOAD 'file.txt' USING PigStorage('\\|-\\|') AS (v1:chararray, v2:chararray, v3:chararray); 

它是分隔符?我的正则表达式?

+0

它看起来不像PigStorage允许使用正则表达式分隔符。试试'PigStorage('| - |')'。 –

+0

对不起,首先尝试,它仍然会抛出:猪脚本未能验证:java.lang.RuntimeException:无法实例化'PigStorage'参数'[| - |]' –

+0

是的,所以问题是,分隔符只能是一个字节字符,并且您有3:[*分隔符 - **单字节字符**,用于分隔字段*](http://pig.apache.org/docs/r0.10.0/api/org /apache/pig/builtin/PigStorage.html#PigStorage(java.lang.String))。我发现一个提示:[*]总是可以创建一个新的loadfunc并实现自己的解析 (可能通过扩展PigStorage并覆盖解析位)。*](http://qnalist.com/questions/572/regular -expression-作为分隔符合pigstorage) –

回答

2

如果您不想编写自定义LOAD函数,则可以使用' - '作为分隔符加载记录,然后添加另一个步骤来替换所有'|'在你的领域。

bag = LOAD 'file.txt' USING PigStorage('-') AS (v1:chararray, v2:chararray, v3:chararray); 
bag_new = FOREACH bag GENERATE 
        REPLACE(v1,'|','') as v1_new, 
        REPLACE(v2,'|','') as v2_new, 
        REPLACE(v3,'|','') as v3_new;