gpt4 book ai didi

hadoop - 简单的 pig 加入并处理两个袋子

转载 作者:可可西里 更新时间:2023-11-01 14:50:29 26 4
gpt4 key购买 nike

我有以下简单的 pig 脚本,

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:列需要从关系中投影才能用作标量

你能帮忙吗?

最好的,萨拉

最佳答案

根据IsEmpty文档:

,,Checks if a bag or map is empty"

在你的情况下,它不起作用,因为 C 只是一个外包,包含一个元组/行,其中字段来自 AA 和 < em>BB :

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

您可以申请 Bincond AA 中每个字段的运算符,而不是检查和替换值,例如:

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这已被 left join 取代,这会导致您描述的相同问题。

关于hadoop - 简单的 pig 加入并处理两个袋子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14908305/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com