Apache pig 无法在Pig脚本中使用双管道分隔符提取数据

Apache pig 无法在Pig脚本中使用双管道分隔符提取数据,apache-pig,hadoop2,Apache Pig,Hadoop2,我试图提取Pig中以管道分隔的数据。以下是我的命令 L = LOAD 'entirepath_in_HDFS/b.txt/part-m*' USING PigStorage('||'); 我得到以下错误 2016-08-04 23:58:21,122 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: Pig script failed to parse: <line 1, column 4> pig script

我试图提取Pig中以管道分隔的数据。以下是我的命令

L = LOAD 'entirepath_in_HDFS/b.txt/part-m*' USING PigStorage('||');
我得到以下错误

2016-08-04 23:58:21,122 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: Pig script failed to parse:
<line 1, column 4> pig script failed to validate: java.lang.RuntimeException: could not instantiate 'PigStorage' with arguments '[||]'
我尝试了几个选项,比如在分隔符之前使用反斜杠(\\| |,\\\\\|),但都失败了。另外,我尝试使用schema,但得到了相同的错误。我正在使用hortonworks(HDP2.2.4)和pig(0.14.0)


感谢您的帮助。如果您需要任何进一步的详细信息,请告诉我。

我遇到过这种情况,通过检查
PigStorage
,我认为
PigStorage
参数应该只解析为一个字符

因此,我们可以使用以下代码:

L0 = LOAD 'entirepath_in_HDFS/b.txt/part-m*' USING PigStorage('|');
L = FOREACH L0 GENERATE $0,$2,$4,$6,$8,$10,$12,$14,$16;

如果您知道自己有多少列,这会很有帮助,而且不会影响性能,因为这是映射端

使用PigStorage加载数据时,它只需要单个字符作为分隔符。 但是,如果您仍然想实现这一点,可以使用MyRegExLoader-

REGISTER '/path/to/piggybank.jar'
A = LOAD '/path/to/dataset' USING org.apache.pig.piggybank.storage.MyRegExLoader('||') 
      as (movieid:int, title:chararray, genre:chararray);

感谢您提供详细的解决方案。实际上,我们的数据可能只有一条管道。因此,源正在发送由双管道分隔的数据。有没有办法将双管道作为分隔符?重复:在哪里可以找到piggybank.jar?
REGISTER '/path/to/piggybank.jar'
A = LOAD '/path/to/dataset' USING org.apache.pig.piggybank.storage.MyRegExLoader('||') 
      as (movieid:int, title:chararray, genre:chararray);