【发布时间】:2012-02-04 00:49:22
【问题描述】:
我在这个问题上纠结了一段时间。我有一个如下所示的数据文件:
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 格。我对如何进行没有想法 - 非常感谢帮助/反馈。谢谢!
【问题讨论】:
标签: user-defined-functions apache-pig