1

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

谢谢

4

1 回答 1

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
    ;
}

我对 pig 中的日期/时间值了解不多,所以我将把如何从时间字符串转换为时间段的方法留给你。

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
    ;
}

您将在花费的_per_customer_per_timeslot 中获得如下输出

1,Morning,200
1,Evening,100
2,Afternoon,30

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

于 2012-08-30T12:25:14.780 回答