2012-08-30 32 views
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可以是repeated.This ID可以像客戶多少錢花費!! 我想要做的是將結果保存在一個文件中,其中包含每個客戶在「上午」,「下午」,「晚上」,「夜間」花費多少錢 (您可以定義您的一些時間段來定義什麼早上都是。 例如這裏大概

 1, 0,202,0,0 
1 is the id, 0--> 0$ spent in morning, 202 in afternon, 0 in evening and night 

現在我有這方面的Python代碼。但我對豬實施這一..上手。 如果任何人都可以只寫/指引我通過這..這就是我需要開始的全部

謝謝

回答

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 

在這一點上應該是微不足道的重新組數據,並把它放在你想要的形狀。