+ -
当前位置:首页 → 问答吧 → 关于高效的大表关联查询的问题

关于高效的大表关联查询的问题

时间:2011-07-21

来源:互联网

1、文本文件 a 是一列数字, 50 W 的记录量 :

    2
    5
    12
    14
    17

    2、文件 b 有 5列,1200W 的记录量,字段分别是 文件 a 的start范围、文件 a 的end范围, col3, col4, col5

    1 2 c13 c14 c15
    3 3 c23 c24 c25
    7 9 c33 c34 c35
    13 20 c43 c44 c45

    3、需求:a中的元素如果在b中的第一列与第二列之间,就算匹配成功,然后输出后面的3、4、5列到文件 c
    例如 运行脚本后,c中的内容应该是:

    c13 c14 c15
    c43 c44 c45
    c43 c44 c45

    4、由于机器性能内存、cpu所限,自己写的awk处理太慢了,一秒钟才出来一个结果,看大家有没有更高效简洁的办法,谢谢!

作者: xrzs1986   发布时间: 2011-07-21

本帖最后由 106033177 于 2011-07-21 22:11 编辑

回复 xrzs1986
如果a是递增的;b区间是递增的且不重复,可以这样,效率没做测试。
  1. def f():
  2.     a=-1
  3.     for s in open('e:/b.txt','r'):
  4.         ss=s.split()
  5.         start,end=int(ss[0]),int(ss[1])
  6.         while a < start:
  7.             a= yield
  8.             a=int(a)
  9.         if a >= start and a <= end:
  10.             a = yield s
  11.             a=int(a)
  12. g=f()
  13. g.next()
  14. for s in open('e:/a.txt','r'):
  15.     r= g.send(s)
  16.     if r:
  17.         print r
  18.    
复制代码

作者: 106033177   发布时间: 2011-07-21