1

Hadoop とそのすべての派生物は初めてです。そして、私は、利用可能な豊富な情報に本当におびえています。

しかし、私が気付いたことの 1 つは、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
    ;
}

私は豚の日付/時刻値についてあまり知識がないので、時間文字列からタイムスロットへの変換方法はあなたに任せます。

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

この時点で、データを再グループ化し、必要な形にするのは簡単です。

于 2012-08-30T12:25:14.780 に答える