在 Pig 中使用多个条件过滤列

Posted

技术标签:

【中文标题】在 Pig 中使用多个条件过滤列【英文标题】:Filter columns using multiple conditions in Pig 【发布时间】:2016-11-14 21:52:41 【问题描述】:

我需要编写一个 pig 脚本,在其中找到几列的平均值,并只获取所有列值都大于计算平均值的那些行。我的脚本是:

i2 = GROUP i1 all;
i3 = FOREACH i2 GENERATE AVG(i1.user_followers_count) AS avg_user_followers_count, AVG(i1.avl_user_follower_following_ratio) AS avg_avl_user_follower_following_ratio, AVG(i1.user_total_liked) AS avg_user_total_liked, AVG(i1.user_total_posts) AS avg_user_total_posts, AVG(i1.user_total_public_lists) AS avg_user_total_public_lists, AVG(i1.avl_user_total_retweets) AS avg_avl_user_total_retweets, AVG(i1.avl_user_total_likes) AS avl_user_total_likes, AVG(i1.avl_user_total_replies) AS avg_avl_user_total_replies, AVG(i1.avl_user_engagements) AS avl_avl_user_engagements, AVG(i1.user_reply_to_reply_count) AS avg_user_reply_to_reply_count;

top_inf = FILTER i1 BY (i1.user_followers_count > i3.avg_user_followers_count, i1.avl_user_total_retweets > i3. avg_avl_user_total_retweets, i1.avl_user_total_likes > i3.avg_avl_user_total_retweets);

但这会引发错误:

ERROR 1200: <file user.pig, line 70, column 103>  mismatched input '>' expecting RIGHT_PAREN

在多个条件下过滤行的正确方法是什么?

【问题讨论】:

【参考方案1】:

使用 AND 分隔条件

top_inf = FILTER i1 BY (i1.user_followers_count > i3.avg_user_followers_count) 
                   AND (i1.avl_user_total_retweets > i3.avg_avl_user_total_retweets) 
                   AND (i1.avl_user_total_likes > i3.avg_avl_user_total_retweets);

【讨论】:

我们需要在每个 AND 条件周围使用大括号吗?

以上是关于在 Pig 中使用多个条件过滤列的主要内容,如果未能解决你的问题,请参考以下文章

在 Oracle DBMS 中的多个列上使用过滤条件连接表

通过在 PIG 中的同一块内计算的条件值在 FOREACH 块内进行过滤

在 R dplyr 中过滤具有多个条件名称匹配的数据框

如何查询函数 Google 电子表格 - 基于多个条件的数据过滤(一次检查多个列)

[基于独立索引向量的多个条件过滤数据帧

Pandas:过滤具有多个字符串条件的行[重复]