Python:连接两个非常大(20+GB)数据集的最有效方法?

2024-09-27 21:26:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个21 GB的数据集:

domain|ns
123.com|ns1.domanihost.com
hymi.net|ns2.hostinger.com

以及另一个12 GB数据集df_ip:

^{pr2}$

我想加入他们的域名和域名,为两个文件中的域名提取ip和ns。在

我想使用它的方法是将df_uip数据加载到字典中,逐行检查df_ns数据是否存在,然后提取ns。但它仍然是非常消耗资源的。在

有没有其他更有效的办法?在


Tags: 数据ipcomdfnetdomain域名ns
2条回答
sort -o df_ns.csv df_ns.csv && \
sort -o df_ip.csv df_ip.csv && \
join -t'|' df_ns.csv df_ip.csv > df_combined.csv

参考号:http://linux.die.net/man/1/join

按你的第一列数据排序。 之后,您就不需要将数据存储在内存中,只需使用如下两个迭代器:

import csv, sys
it1 = (csv.reader(open("df_ns", "r")))
it2 = (csv.reader(open("df_ip", "r")))
# skip the headers
it1.next()
it2.next()
try:
    dm1, ns = it1.next() # first row
except StopIteration:
    sys.exit(0)
try:
    dm2, ip = it2.next()
except StopIteration:
    sys.exit(0)
while True:
    if dm1 == dm2:
        print dm1, ns, ip
    if dm1 < dm2:
        try:
            dm1, ns = it1.next()
        except StopIteration:
            break
        continue
    try: 
        dm2, ip = it2.next()
    except StopIteration:
        break

相关问题 更多 >

    热门问题