如果存在多个值,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))
如果包含17
和11
,我想过滤并获取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