avatar
一道大数据题# JobHunting - 待字闺中
q*w
1
在glassdoor上facebook版上看的的。
Given 10,000 servers containing a Billion integers each how would you find
how to find the median?
1. 用2 heap? 全部数走这个two heap内存消耗太大吧。
2. 用类似 find median of two sorted array 方法?那每台机都要把全部数放到内存
去。每台机都是2^32*4, 也就是4GB内存(假设int32)。感觉消耗太大。
3. bucket sort将所有server的所有数都放到master的bucket中去,这样只要master开
一个4G的内存就好了。而且可以并行。锁的粒度可以到bucket。
大家怎么认为?
avatar
f*e
2
ha最新的hadoop-example.jar里有,用binary search。bucket sort也不错。

【在 q*****w 的大作中提到】
: 在glassdoor上facebook版上看的的。
: Given 10,000 servers containing a Billion integers each how would you find
: how to find the median?
: 1. 用2 heap? 全部数走这个two heap内存消耗太大吧。
: 2. 用类似 find median of two sorted array 方法?那每台机都要把全部数放到内存
: 去。每台机都是2^32*4, 也就是4GB内存(假设int32)。感觉消耗太大。
: 3. bucket sort将所有server的所有数都放到master的bucket中去,这样只要master开
: 一个4G的内存就好了。而且可以并行。锁的粒度可以到bucket。
: 大家怎么认为?

avatar
q*w
3
能说一下具体是怎么用binary search的吗?谈一下memory消耗和时间复杂度?

【在 f*****e 的大作中提到】
: ha最新的hadoop-example.jar里有,用binary search。bucket sort也不错。
avatar
f*e
4
和quicksort差不多,可以先以0为pivot,然后算出>0和<0的数的数目,发给reducer,
reducer确定median是大于0还是小于0,然后several round like this。

【在 q*****w 的大作中提到】
: 能说一下具体是怎么用binary search的吗?谈一下memory消耗和时间复杂度?
avatar
s*d
5
每个server10万个数据?各自开一个2^16大的数组,统计以高位数为index的数据各多
少个,
count[num>>16+32768]++
报上来从低到高累加,就知道中位数落在哪个区间。然后再用低16位统计一遍就
知道了
二次扫描
考虑负数的话,+32768
avatar
q*w
6
在glassdoor上facebook版上看的的。
Given 10,000 servers containing a Billion integers each how would you find
how to find the median?
1. 用2 heap? 全部数走这个two heap内存消耗太大吧。
2. 用类似 find median of two sorted array 方法?那每台机都要把全部数放到内存
去。每台机都是2^32*4, 也就是4GB内存(假设int32)。感觉消耗太大。
3. bucket sort将所有server的所有数都放到master的bucket中去,这样只要master开
一个4G的内存就好了。而且可以并行。锁的粒度可以到bucket。
大家怎么认为?
avatar
f*e
7
ha最新的hadoop-example.jar里有,用binary search。bucket sort也不错。

【在 q*****w 的大作中提到】
: 在glassdoor上facebook版上看的的。
: Given 10,000 servers containing a Billion integers each how would you find
: how to find the median?
: 1. 用2 heap? 全部数走这个two heap内存消耗太大吧。
: 2. 用类似 find median of two sorted array 方法?那每台机都要把全部数放到内存
: 去。每台机都是2^32*4, 也就是4GB内存(假设int32)。感觉消耗太大。
: 3. bucket sort将所有server的所有数都放到master的bucket中去,这样只要master开
: 一个4G的内存就好了。而且可以并行。锁的粒度可以到bucket。
: 大家怎么认为?

avatar
q*w
8
能说一下具体是怎么用binary search的吗?谈一下memory消耗和时间复杂度?

【在 f*****e 的大作中提到】
: ha最新的hadoop-example.jar里有,用binary search。bucket sort也不错。
avatar
f*e
9
和quicksort差不多,可以先以0为pivot,然后算出>0和<0的数的数目,发给reducer,
reducer确定median是大于0还是小于0,然后several round like this。

【在 q*****w 的大作中提到】
: 能说一下具体是怎么用binary search的吗?谈一下memory消耗和时间复杂度?
avatar
s*d
10
每个server10万个数据?各自开一个2^16大的数组,统计以高位数为index的数据各多
少个,
count[num>>16+32768]++
报上来从低到高累加,就知道中位数落在哪个区间。然后再用低16位统计一遍就
知道了
二次扫描
考虑负数的话,+32768
avatar
r*d
11
您好,看了您的解答,很巧,本人菜鸟,有个小问题,统计高位index的时候可否从高到
低累加呢?
谢谢.

【在 s******d 的大作中提到】
: 每个server10万个数据?各自开一个2^16大的数组,统计以高位数为index的数据各多
: 少个,
: count[num>>16+32768]++
: 报上来从低到高累加,就知道中位数落在哪个区间。然后再用低16位统计一遍就
: 知道了
: 二次扫描
: 考虑负数的话,+32768

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。