0

このJava割り当てを開始するのに行き詰まっています。どんな助けでも大歓迎です。2 つのテキスト ファイルがあります。

1) ユーザーログ (2MB)

UserID  Activity        TimeStamp
asdf    login       1279246015000
asdf    login       1280264668000
aaa     login       1280265253000
aaa     purchase    1279121883000
abc     login   1279122061000

2) ユーザープロフィール

UserID     Website
asdf       aaa.com
aaa        abc.com
abc        aaa.com

次の情報を出力する必要があります。

Number of logins     Total users aaa.com    abc.com
1                    xxx                    xxx
2
3
4
etc...

予想される出力は次のとおりです。「Number of logins」は、アクティビティ別にグループ化された、ログ ファイルで実行されたログインの数です。したがって、最初の行には、aaa.com Web サイト、abc.com Web サイトなどから 1 回だけログインしたユーザーの総数が Web サイトごとに表示されます。2 行目は、aaa.com、abc.com などから 2 回ログインしたユーザーの合計数を示します。など。

ユーザー ログとユーザー プロファイルのテキスト ファイルは、重複排除する必要があります。

4

2 に答える 2

0

2Mb のログ ファイルの場合、ファイルを読み取り、要素をカウントする単純なプログラムは、数秒 (それより短い場合もあります) で実行されます。


マップ (Java 辞書) を使用する必要があります。

  • UserProfiles のマップ: キー = ユーザー ID、値 = サイト
  • サイトごとにログインをカウントするマップ。このマップのキーはサイトで、値 = カウントです。

ログの行を読み取るたびに、userprofiles マップからユーザー ID のサイトを取得し、countLogins マップでこのサイトのサイトごとのログイン数を増やします。

于 2012-10-28T10:54:28.230 に答える
0

Hadoop を使用することもできます (それでも、やり過ぎかもしれませんが、知っておく価値はあります)。

特に、この例は、大きなファイル内の単語をカウントする方法を示しています。reduce フェーズを微調整し、そこに Web サイトを含める必要があります。

于 2012-10-27T18:30:36.193 に答える