0

何百万ものレコードを含むファイルがあります。ファイル内のすべての行 (レコード) には、1 つのユーザー ID と対応する URL (文字列) があります。ファイルで最も訪問された 1000 の URL (文字列) を見つける必要があります。

Javaアプリケーションを使用してこれを行う必要があります。可能な限り最善のアプローチは何ですか?

4

3 に答える 3

1

Javaではありませんが、記録のために:

$ cat records.txt
user1 http://example.com/
user2 http://example.com/
user2 http://example.com/some/path
user1 http://example.com/yet/another path

$ cut -d" " -f2 < records.txt | sort | uniq -c | sort -n -r | head -1000
于 2012-08-08T14:25:47.897 に答える
0

URL をキーとし、カウントを値とする Map は、確かに最も単純なアプローチです (例: HashMap<String, Integer>)。行を読み取るたびにカウントを増やします。

トップ 1000 を取得するには、すべてのエントリを、エントリの値でソートTreeSetするカスタムを使用して に投入します。Comparator次に、セット内の最初の 1000 項目をダンプします。

これは、「数百万」のレコードで機能するはずです。ただし、すべてがメモリ内で行われるため、数十億、または数億のレコードがある場合、問題が発生する可能性があります。

于 2012-08-08T14:33:23.387 に答える
0

それをデータベースに挿入し、「select count(*), url from Visited group by url order by count(*)」のような SQL クエリでデータを取得します。

于 2012-08-08T14:37:40.717 に答える