【问题标题】:Check if an element is present in a bag?检查一个元素是否存在于包中?
【发布时间】:2014-10-15 19:09:32
【问题描述】:

如果包中包含元素,我如何签入

示例:在一个 chararray 包中,如何检查是否存在令牌?

【问题讨论】:

    标签: piglatin apache-pig


    【解决方案1】:

    在 Apache Pig 中,您可以使用嵌套在 FOREACH see Pig Basics 中的语句。以下是文档中的示例: AB 中的一个包。

    X = FOREACH B {
            S = FILTER A BY 'xyz';
            GENERATE COUNT (S.$0);
    }
    

    您可以使用 IsEmpty 和 ?: 运算符代替 COUNT

    X = FOREACH B {
            S = FILTER A BY 'xyz';
            GENERATE (IsEmpty(S.$0)) ? 'xyz NOT PRESENT' : 'xyz PRESENT') as present, B;
    }
    

    或者只留下包含数据的包:

    X = FOREACH B {
            S = FILTER A BY 'xyz';
            GENERATE B, S;
    }
    F = FILTER X BY not IsEmpty(S);
    R = FOREACH F GENERATE B;
    

    这将避免代价高昂的自身连接,因为额外的连接是额外的 Map Reduce 作业。

    【讨论】:

    • 在 PIG 0.15 中,您不能从嵌套表达式中投影 B。这对我不起作用: X = FOREACH B { S = FILTER A BY 'xyz';生成 B,S; }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2017-09-17
    • 1970-01-01
    • 2022-01-06
    • 2015-11-07
    • 2017-03-15
    相关资源
    最近更新 更多