gpt4 book ai didi

user-defined-functions - 在 Pig 中按袋子值(value)分组

转载 作者:行者123 更新时间:2023-12-04 00:18:05 25 4
gpt4 key购买 nike

我已经被这个问题困住了一段时间。我有一个看起来像这样的数据文件:

2012/01/01        Name1      "Category1,Category2,Category3"
2012/01/01 Name2 "Category2,Category3"
2012/01/01 Name3 "Category1,Category5"

每个项目都与一个以逗号分隔的类别列表相关联。我希望能够按类别名称分组,以获得如下输出:
Category1    Name1, Name3
Category2 Name1, Name2
...
Category5 Name3

(更具体地说,我不需要元素的名称 - 只需对该类别中的元素数量进行计数即可)

我最终编写了一个 UDF 来获取逗号分隔的类别字段,并将其转换为 Pig 包。我的数据架构现在是这样的:
{date: chararray, name: chararray, categories: {t: (category:chararray)}}
我被困在下一步 - 实际上按嵌套包值执行分组。我尝试了嵌套 FOREACH 语句的变体,但没有任何运气。例如:
x = FOREACH myData
{
categoryNames = FOREACH categories GENERATE category;
GENERATE myData.Name, categoryNames;
}

我的想法是这种语法可以生成 (Name, category) 的元组,我可以运行一个 GROUP 。然而,实际输出是整个包,带我回到第 1 方格。我对如何进行没有想法 - 帮助/反馈将不胜感激。谢谢!

最佳答案

假设每个名称在您的数据文件中都是唯一的,您可以 FLATTEN类别的包,然后 GROUP按类别和 COUNT按类别划分的名称数量。

例如

name_category = 
FOREACH data
GENERATE
name,
FLATTEN(categories) AS category;

category_group =
GROUP name_category
BY category;

category_count =
FOREACH category_group
GENERATE
FLATTEN(group) AS category,
COUNT(name_category) AS count;

关于user-defined-functions - 在 Pig 中按袋子值(value)分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9137426/

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