PIG:无法为别名打开迭代器AliasName.Scalar在输出中有多行

时间:2016-09-06 07:41:49

标签: hadoop apache-pig epoch

我是猪的新手,并试图自己学习。

我写了一个脚本,用一个从words.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:无法打开别名B的迭代器

     

java.lang.Exception的:   org.apache.pig.backend.executionengine.ExecException:错误0:   标量在输出中有多行。 1st:(word1),2nd:(word2)(常见原因:" JOIN"然后" FOREACH ...生成foo.bar"   应该是" foo :: bar" ) at   org.apache.hadoop.mapred.LocalJobRunner $ Job.runTasks(LocalJobRunner.java:462)   在   org.apache.hadoop.mapred.LocalJobRunner $ Job.run(LocalJobRunner.java:522)   引起:org.apache.pig.backend.executionengine.ExecException:ERROR   0:标量在输出中有多行。第1名:(第1名),第2名   :(word2)(常见原因:"加入"然后" FOREACH ...生成foo.bar"   应该是" foo :: bar" ) 在   org.apache.pig.impl.builtin.ReadScalars.exec(ReadScalars.java:122)at at   Ø

请建议我解决这个问题。

谢谢。

1 个答案:

答案 0 :(得分:1)

我自己解决了。 刚从内部CONCAT中删除A.它对我有用。

脚本:

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