PIG:标量在输出中有不止一行
Posted
技术标签:
【中文标题】PIG:标量在输出中有不止一行【英文标题】:PIG: scalar has more than one row in the output 【发布时间】:2016-03-02 06:15:20 【问题描述】:我在 pig 中有以下代码,其中我正在检查存储在记录中的主文件中的字段(记录中的 srcgt 和 destgt),以获取另一个文件(intlgt.txt)中提到的值 338,918299,181,238
但它会引发错误如下所述。您能否建议如何在 Apache Pig 版本 0.15.0 (r1682971) 上克服这个问题。
猪码:
record = LOAD '/u02/20160201*.SMS' USING PigStorage('|','-tagFile') ;
intlgtrec = LOAD '/u02/config/intlgt.txt' ;
intlgt = foreach intlgtrec generate $0 as intlgt;
cdrfilter = foreach record generate (chararray) $1 as aparty, (chararray) $2 as bparty,(chararray) $3 as dt,(chararray)$4 as timestamp,(chararray) $29 as status,(chararray) $26 as srcgt,(chararray) $27 as destgt,(chararray)$0 as cdrfname ,(chararray) $13 as prepost;
intlcdrs = FILTER cdrfilter by ( STARTSWITH(srcgt,intlgt::intlgt) or STARTSWITH(destgt,intlgt::intlgt) ) ;`
错误是:
WARN org.apache.hadoop.mapred.LocalJobRunner - job_local1939982195_0002
java.lang.Exception: org.apache.pig.backend.executionengine.ExecException: ERROR 0: Scalar has more than one row in the output. 1st : (338), 2nd :(918299) (common cause: "JOIN" then "FOREACH ... GENERATE foo.bar" should be "foo::bar") at org.apache.hadoop.mapred.LocalJobRunner$Job.runTasks(LocalJobRunner.java:462) at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:522)
【问题讨论】:
请附上示例输入文件和所需的输出。 以错误消息为提示,我认为问题出在filter
语句中。更具体地说,在STARTSWITH
部分。我想应该是intlgt.intlgt
而不是intlgt::intlgt
。但即便如此,我认为这不会像你想要的那样工作,因为你试图通过来自不同关系的字段进行过滤。
【参考方案1】:
当你使用时
intlcdrs = FILTER cdrfilter by ( STARTSWITH(srcgt,intlgt::intlgt) or STARTSWITH(destgt,intlgt::intlgt) );
PIG 正在寻找一个标量。无论是数字还是字符数组;但只有一个。所以猪假设你的 intlgt::intlgt 是与一行的关系。例如
的结果intlgt = foreach (group intlgtrec all) generate COUNT_STAR(intlgtrec.$0)
(这将生成单行,包含原始关系中的记录数)
在您的情况下, intlgt 包含不止一行,因为您尚未对其进行任何分组。 根据您的代码,您正在尝试查找两端都有 intlgt 的 SMS 消息。可能的解决方案:
-
1234563这将为您提供 srcgt 以 intlgt 中的值开头的记录。然后对 destgt 重复此操作。
1234563每个“长度”都需要)。
如果两个关系中的行数不是太大,则在它们之间进行交叉,这将创建来自记录的行和来自 intlgt 的行的所有可能组合。然后就可以通过 STARTSWITH(srcgt, intlgt::intlgt) 进行过滤,因为它们两个是同一个关系的字段。请注意这种方法,因为记录的数量可能会变得非常庞大!
【讨论】:
嗨跑,你能看看我的帖子***.com/questions/37119870/…以上是关于PIG:标量在输出中有不止一行的主要内容,如果未能解决你的问题,请参考以下文章