2016-09-06 41 views
1

我是新来的猪,并试图自己学习。PIG:无法打开别名的迭代器AliasName.Scalar在输出中有多个行

我已经写了一个脚本来获取从word.txt文件中读取单词的时代。

这是脚本。

words = LOAD 'words.txt' AS word:chararray; 
B = FOREACH A GENERATE CONCAT(CONCAT(A.word,'_'),(chararray)ToUnixTime(CurrentTime()); 
dump B; 

但问题是,如果words.txt文件只有一个词,它会给出正确的输出。

如果具有像

word1 
word2 
word3 
word4 

多个单词然后它给以下错误

ERROR 1066:无法打开迭代器别名乙

java.lang中.Exception: org.apache.pig.backend.executionengine.ExecException:ERROR 0: 标量在输出中有多行。 1:(word1),2:(word2)(常见原因:“JOIN”,然后“FOREACH ... GENERATE foo.bar” 应该是“foo :: bar”)在 org.apache.hadoop.mapred。 LocalJobRunner $ Job.runTasks(LocalJobRunner.java:462) at org.apache.hadoop.mapred.LocalJobRunner $ Job.run(LocalJobRunner.java:522) 引起:org.apache.pig.backend.executionengine.ExecException :错误 0:标量在输出中有多个行。 (word1),第二个 :(word2)(常见原因:“JOIN”,然后“FOREACH ... GENERATE foo.bar” 应该是“foo :: bar”),位于 org.apache.pig.impl。 builtin.ReadScalars.exec(ReadScalars.java:122)at o

请建议我解决这个问题。

谢谢。

+0

有it.in脚本只是删除A.它的工作 –

回答

1

自己解决。 刚刚从内部CONCAT删除A.它为我工作。

脚本:

words = LOAD 'words.txt' AS word:chararray; 
B = FOREACH A GENERATE CONCAT(CONCAT(word,'_'),(chararray)ToUnixTime(CurrentTime()); 
dump B;