如果存在多个值,Apache Pig Group by 和过滤器?

Posted

技术标签:

【中文标题】如果存在多个值,Apache Pig Group by 和过滤器?【英文标题】:Apache Pig Group by and Filter if multiple values exist? 【发布时间】:2021-05-26 13:57:04 【问题描述】:

我正在尝试对具有相同 ID 的多行进行分组,然后检查组中的每个元组是否包含两个值,例如:

(10461 , 55 )
(10435 , 17 )
(10435 , 11 )
(10435 , 72 )
(10437 , 11 )
(10830 , 72 )

在我将其分组后:groupedData = group dataPoints by data_id;

我明白了:

(10461 ,(10461 , 55))


(10435 ,(10435 , 17),(10435 , 11),(10435 , 72))

如果包含1711,我想过滤并获取10435 的值。

【问题讨论】:

【参考方案1】:

您可以使用嵌套的FOREACH 过滤袋子,然后检查空袋子。请注意,我不确定您用数字(55、17、11 等)将字段称为什么,所以这是下面代码中的 value - 根据需要替换!

filteredBags = FOREACH groupedData 
    seventeen = FILTER dataPoints BY value == 17;
    eleven = FILTER dataPoints BY value == 11;
    GENERATE
    group AS data_id,
    seventeen,
    eleven;


nonNullBags = FILTER filteredBags BY NOT IsEmpty(seventeen) AND NOT IsEmpty(eleven);

finalIds = FOREACH nonNullBags GENERATE data_id;

【讨论】:

以上是关于如果存在多个值,Apache Pig Group by 和过滤器?的主要内容,如果未能解决你的问题,请参考以下文章

APACHE PIG - 模式中不存在错误投影字段 [Units_Sold]:group:chararray,D2:bag:tuple(Item_Type:chararray,Units_Sold:i

apache-Pig map-reduce group by error

Apache Pig GROUP BY ,ORDER BY

pig 示例 apache [输入路径不存在]

apache Pig 试图在每个组中获得最大计数

错误包 org.apache.pig.FilterFunc 不存在