我是一个新手。请帮我解决这个问题。我不知道我错在哪里。
我的数据
(catA,myid_1,2014,store1,appl)
(catA,myid_2,2014,store1,milk)
(catA,myid_3,2014,store1,appl)
(catA,myid_4,2014,store1,milk)
(catA,myid_5,2015,store1,milk)
(catB,myid_6,2014,store2,milk)
(catB,myid_7,2014,store2,appl)
以下是预期结果
(catA,2014,milk,2)
(catA,2014,apple,2)
(catA,2015,milk,1)
(catB,2014,milk,1)
(catB,2014,apple,1)
需要根据种类、年份计算食物的数量。下面是我的Pig剧本
list = LOAD 'shop' USING PigStorage(',') AS (category:chararray,id:chararray,mdate:chararray,my_store:chararray,item:chararray);
list_of = FOREACH list GENERATE category,SUBSTRING(mdate,0,4) as my_date,my_store,item;
StoreG = GROUP list_of BY (category,my_date,my_store);
result = FOREACH StoreG
{
food_list = FOREACH list_of GENERATE item;
food_count = DISTINCT food_list;
GENERATE FLATTEN(group) AS (category,my_date,my_store),COUNT(food_count);
}
DUMP result;
我对上述脚本的输出如下
(catA,2014,store1,2)
(catA,2015,store1,1)
(catB,2014,store2,2)
谁能告诉我我的剧本哪里错了吗?谢谢
2条答案
按热度按时间sd2nnvve1#
一种方法。不是最优雅但有效的例子:
当我们将别名项添加到
GROUP BY
语句基本上与查找不同的项然后对它们进行计数(正如您在括号中所做的那样)是相同的。如果您仍然想使用您的代码,您只需添加一个关系
food_list.item
以下代码:u3r8eeie2#
应该是
因为您的预期结果是按项分组,而不是按存储区分组。