资料来源:谷歌面试问题
由于有一个庞大的计算机网络,每个计算机都保存访问URL的日志文件,可以找到访问量最大的十大URL.。
有很多大的<string (url) -> int (visits)> maps。
计算< string (url) -> int (sum of visits among all distributed maps),并得到合并地图中的前十位。
主要限制:映射太大,无法通过网络传输。也不能直接使用MapReduce .
我现在遇到了相当多的此类问题,需要在大型分布式系统上完成processiong。我无法思考或找到一个合适的答案。
我所能想
我试着统计十大访问量最多的网址。我有一张简单的桌子。对于每一次URL访问,都会添加一行该URL作为内容。访问的URL最多,重复次数最多。
我已经找到了许多关于SELECT count(*) FROM tablename WHERE url='tofind'的引用,但只有当我提供了URL数据时,才能这样做。
欢迎提出建议。
我有预订酒店的数据集。date_in格式为“yyyy”。我需要按月挑选访问量最大的十大酒店。
SELECT top_visits.date_ci, top_visits.hotel_id, top_visits.count_visits
FROM (
SELECT date_ci, hotel_id, COUNT(id) AS count_visits,
RANK() OVER (
PARTITION BY date_ci, hotel_id ORDER BY COUNT(id) DESC) as rank
FROM (
SELECT id, hote