非常基本的猪拉丁初学者代码

时间:2012-08-30 03:38:31

标签: hadoop apache-pig

我是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代码..但我必须在猪中实现这个...开始。 如果有人可以通过这个来写/引导我。那就是我需要开始的所有内容。

由于

1 个答案:

答案 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

此时,重新分组数据并将其放入所需的形状应该是微不足道的。