简单的猪加入和处理两个袋子

Posted

技术标签:

【中文标题】简单的猪加入和处理两个袋子【英文标题】:simple pig to join and process two bags 【发布时间】:2013-02-16 08:05:27 【问题描述】:

我有以下简单的猪脚本,

AA = LOAD 'A' USING PigStorage(',') as (f1,f2,f3);
BB = LOAD 'B' AS (f1);
C = foreach AA generate f1;
C = JOIN AA BY f1 LEFT OUTER, BB BY f1 using 'replicated';
D = FOREACH C GENERATE FLATTEN((IsEmpty(AA) ? null : AA));
store D into 'd';

但是当我运行时,它给了我这个错误:

标量投影无效:AA:需要从关系中投影列才能用作标量

你能帮忙吗?

最好, 萨拉

【问题讨论】:

【参考方案1】:

根据IsEmpty 文档:

,,检查包或地图是否为空"

在你的情况下它不起作用,因为 C 只是一个 outer bag 包含一个元组/行,其中包含 AA 和 BB :

C: AA::f1: int,AA::f2: chararray,AA::f3: chararray,BB::f1: int

您可以在 AA 的每个字段上应用 Bincond 运算符来检查和替换值,例如:

D = foreach C generate (AA::f1 is null ? '-1' : AA::id) ... ;

但如果你坚持使用 IsEmpty,那么以下内容就可以完成:

D = foreach C 
 bg = TOBAG(TOTUPLE(AA::f1,AA::f2,AA::f3));
 generate IsEmpty(bg) ...;

注意: 我认为 IsEmpty 部分的 Pig 文档中可能存在拼写错误。 Earlier 在示例中 cogroup 用于连接两个关系,创建一个 IsEmpty 可以在其上操作的内袋。 Later 这已被左连接替换,这会导致您描述的相同问题。

【讨论】:

以上是关于简单的猪加入和处理两个袋子的主要内容,如果未能解决你的问题,请参考以下文章

猪步执行细节

排列组合

如何从复杂的猪数据类型中提取简单的猪数据类型

文本消息中字符串的猪计数出现

使用 Ms Access 简单加入给我重复的数据

Kafka 流可以有效地处理加入流吗?