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