我是猪的新手,并试图自己学习。
我写了一个脚本,用一个从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 Ø
请建议我解决这个问题。
谢谢。
答案 0 :(得分:1)
我自己解决了。 刚从内部CONCAT中删除A.它对我有用。
脚本:
words = LOAD 'words.txt' AS word:chararray;
B = FOREACH A GENERATE CONCAT(CONCAT(word,'_'),(chararray)ToUnixTime(CurrentTime());
dump B;