我是hadoop及其所有衍生品的新手。我真的被现有的大量信息所吓倒。
但有一件事我已经意识到,要开始实施/使用hadoop或分布式代码,必须基本上改变他们对问题的思考方式。
我想知道是否有人可以帮助我。
所以,基本上(和其他人一样)我有一个原始数据..我想解析它并提取一些信息,然后运行一些算法并保存结果。
假设我有一个文本文件“foo.txt”,其中数据如下:
id,$value,garbage_field,time_string\n
1, 200, grrrr,2012:12:2:13:00:00
2, 12.22,jlfa,2012:12:4:15:00:00
1, 2, ajf, 2012:12:22:13:56:00
正如您所看到的那样,ID可以重复。这个ID就像客户花了多少钱! 我想要做的是将结果保存在一个文件中,该文件包含每个客户在“早上”,“下午”,“晚上”,“晚上”花了多少钱。 (您可以定义一些时间段来定义早上和所有时间段。 例如,这里可能是
1, 0,202,0,0
1 is the id, 0--> 0$ spent in morning, 202 in afternon, 0 in evening and night
现在我有一个python代码..但我必须在猪中实现这个...开始。 如果有人可以通过这个来写/引导我。那就是我需要开始的所有内容。
由于
答案 0 :(得分:2)
我是这样开始的:
foo = LOAD 'foo.txt' USING PigStorage(',') AS (
CUSTOMER_ID:int,
DOLLARS_SPENT:float,
GARBAGE_FIELD,
TIME_STRING:chararray
);
foo_with_timeslots = FOREACH foo {
GENERATE
CUSTOMER_ID,
DOLLARS_SPENT,
/* DO TIME SLOT CALCULATION HERE */ AS TIME_SLOT
;
}
我对猪的日期/时间值知之甚少,所以我将留下如何从时间字符串到时间段的转换。
id_grouped_foo_with_timeslots = GROUP foo_with_timeslots BY (
CUSTOMER_ID,
TIME_SLOT
);
-- Calculate how much each customer spent at time slots
spent_per_customer_per_timeslot = FOREACH id_grouped_foo_with_timeslots {
GENERATE
group.CUSTOMER_ID as CUSTOMER_ID,
group.TIME_SLOT as TIME_SLOT,
SUM(foo_with_timeslots.DOLLARS_SPENT) as TOTAL_SPENT
;
}
您将在spent_per_customer_per_timeslot中获得如下输出
1,Morning,200
1,Evening,100
2,Afternoon,30
此时,重新分组数据并将其放入所需的形状应该是微不足道的。