首页 技术 正文
技术 2022年11月15日
0 收藏 877 点赞 5,035 浏览 1323 个字
起因:之前用蓄水池抽样,算法精简,但直观性很差。 所以这次采用了简单的,为没一个行,赋值一个随机值,然后取 最大的K个作为,随机样本。基本思路:为每一个行(record,记录,实体) 赋一个random值。 每个map取一个Top K 值。 由于是求topk,可以设置一个reduce,再求 Top Kmap阶段:
一般思路, 读取所有的,sort,取前 10000.------>运行时发现巨慢。 之后换成了 小顶堆 求TopK。速度就很快了。import heapq
import randomclass Url(object):    def __init__(self, url, c, lkt, r):
        self.url = url
        self.c = c
        self.lkt = lkt
        self.r =r    def __cmp__(self, x):
        return cmp(self.r, x.r)    def __str__(self):
        return ("%s\t" * 4).strip() % (self.url, self.c, self.lkt, self.r)class TopKHeap(object):
    def __init__(self, k):
        self.k = k
        self.data = []    def Push(self, elem):
        if len(self.data) < self.k:
            heapq.heappush(self.data, elem)
        else:
            topk_small = self.data[0]
            if elem > topk_small:
                heapq.heapreplace(self.data, elem)    def TopK(self):
        return [x for x in reversed([heapq.heappop(self.data) for x in xrange(len(self.data))])]import sys
import topkK = 100000
tkh = topk.TopKHeap(K)
#test = []#url,count,link_found_time,random
for line in sys.stdin:
    line = line.strip()
    arr = line.split('\x01')
    if len(arr) != 4:
        continue    arr[3] = float(arr[3])
    url = topk.Url(arr[0], arr[1], arr[2], arr[3])
    tkh.Push(url)    #test.append(url)for e in tkh.TopK():
    print e#test code, test success
#print '---------------------------------'
#for e in sorted(test, reverse=True)[0: 10]: (这种类型的sorded太慢了)
#    print e
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,038
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,524
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,372
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,152
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,785
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,868