Skynet

---------- ---------- 我的新 blog : liukaiyi.cublog.cn ---------- ----------

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks


数据说明:
knnuu_...txt 文件大小 3.2G 数据格式是 
user1   user2    score
..
usern   userm    score

我这里希望通过清洗得到:
与 user1 关系最近的 top 100 人

由于数据并非需要百分之百准确,我放弃在分隔出的数据
if len(dr)!=3  : continue
开了 7 个线程 也就是 会有 7 个 用户 的  uid 对 top 100 uid 会出现问题
对应  总用户数几十万来说  呵呵 ! 我就用这 完善7个特殊人的列表时间写个 blog 吧


并结合 linux split , awk 等 快速实现的 猥琐 多线程 哈哈!!
怎么修改下  速度提升 5倍,原来的 一小时 到 10多分钟 。。。。。


# split  --bytes=500m  knnuu_20091123.txt knnuu/
#
 ls a* | awk '{system( "  python uu.py "$0" & " )}'
import bsddb,sys
db 
= bsddb.hashopen('../id-item-y-09-10-11.db','c')

uid 
= -1
arr
=[]
arrsc
=[]
fw 
= open('tc/'+sys.argv[1]+'uid-uid-sc.txt','w')
ii
=0

def insertion_sort(arr,arrsc,uid,sc):
    ls 
= min(100,len(arrsc))
    if ls!=0 and sc < arrsc[ls-1] : return
    
for i in xrange(ls):
        
if arrsc[i]<=sc  :
            arrsc.insert(i,sc)
            arr.insert(i,uid)
            
return
        
elif arrsc[i] > sc :  continue
    
if ls < 99 :
        arr.append(uid)
        arrsc.append(sc)

#for row in open('knnuu_20091123.txt') :
for row in open(sys.argv[1]):
    dr 
= row.split('\n')[0].split('\t')
    
if len(dr)!=3 : continue
    u1,u2,strsc 
= dr[0],dr[1],dr[2]

    sc 
= float(strsc)
    
if uid == -1 : uid = u1
    
if u1 != uid :
        
for c in xrange( min(100,len(arrsc)) ):
            tu 
= arr[c]
            ts 
= arrsc[c]
            
print >>fw,"%s\t%s\t%s" % ( db[u1],db[tu],ts )
        
print uid
        fw.flush()
        arr
=[u1]
        arrsc
=[sc]
        uid
=u1
    
else :
        insertion_sort(arr,arrsc,u2,sc)
    ii
+=1
    
#print ii,u1,uid,u2,strsc,len(arr),len(arrsc)
    #if ii>10 : break

fw.close()
                                                                                                                                                                        




整理 www.blogjava.net/Good-Game
posted on 2009-11-23 14:43 刘凯毅 阅读(1401) 评论(0)  编辑  收藏 所属分类: 数据清洗

只有注册用户登录后才能发表评论。


网站导航: