0

以下のような特定の製品販売のログデータがあります

   product     date              time   Rs
   red ballons 2012-10-02       0128    1000
   blue socks  2012-10-02       0003    3498
   current     2012-10-02       0120    0987
   red ballons 2012-10-02       0056    1000
   blue socks   2012-10-02      0059    6764

java mapreduce私が慣れていない特定の日の1時間あたりおよび12時間あたりの製品販売を計算するための の書き方について、誰か提案をくださいmapreduce。マッパーがキーを選択する方法と、1 つのマップ削減ジョブで 1 時間の販売と 12 時間の販売の両方の分析がどのように行われるかを理解する必要があります。

4

1 に答える 1

0

マッパーに、各エントリの 1 つ以上の時間コンポーネント (日付と時間、日付と 12 時間など) を決定させ、それらの一意の識別子を考え出させます。マッパーを使用して書き込むときは、一意の識別子をキーとして使用し、各製品の販売額を値として使用します。

レデューサーは、各期間のすべての売上を受け取ります。あなたがする必要があるのは、すべての金額の合計を実行することだけです.

複数の期間を実行する場合は、1 時間と 12 時間の期間を使用します。このような stripHours 関数を作成します。

public static Date stripHours(Date date, int hours) {
    long offsetMillis = date.getTimezoneOffset() * 60000l;
    long timePeriod = hours * 3600000l;
    return new Date(((date.getTime() - offsetMillis) / timePeriod) * timePeriod + offsetMillis);
}

マッパーに入力される行ごとに、key=stripHours(date, 1) を含む行と、key=stripHours(date, 12) を含む別の行を書き込みます。どちらの場合も、値を製品の販売額にします。

もちろん、1 時間タイプのキーと 12 時間タイプのキーを区別する何らかの方法が必要です。本当に簡単な方法は、"12 " + strippedDate.getTime() や "1 " + strippedDate.getTime() などの何らかの文字列連結を使用することですが、詳細を把握できると確信しています。

于 2013-10-27T15:23:15.700 に答える