我有一个包含数百万条记录的文件。文件中的每一行(记录)都将有一个用户 ID 和一个相应的 URL(字符串)。我需要在文件中找到 1000 个访问量最大的 URL(字符串)。
我需要使用 java 应用程序来做到这一点。最好的方法是什么?
我有一个包含数百万条记录的文件。文件中的每一行(记录)都将有一个用户 ID 和一个相应的 URL(字符串)。我需要在文件中找到 1000 个访问量最大的 URL(字符串)。
我需要使用 java 应用程序来做到这一点。最好的方法是什么?
不是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
将其插入数据库,然后使用 sql 查询检索数据,例如“select count(*), url fromvisited group by url order by count(*)”
以 URL 为键、计数为值的 Map 无疑是最简单的方法(例如,HashMap<String, Integer>
)。每次阅读一行时增加计数。
要获得前 1000 名,请将所有条目放入TreeSet
一个自定义项中,该自定义Comparator
项对条目的值进行排序。然后转出集合中的前 1000 个项目。
这应该适用于“数百万”条记录。但是,如果您有数十亿甚至几亿条记录,您可能会遇到问题,因为一切都在内存中完成。