Python 将大型.csv文件处理到Redis中

Python 将大型.csv文件处理到Redis中,python,csv,redis,Python,Csv,Redis,我有一个非常大的CSV文件。7500多万行 我必须每小时将这个.csv文件“发布”到Redis集群中一次。(每小时) 脚本: import csv import redis import random from redis import StrictRedis import multiprocessing as mp import itertools import time def worker(chunk): return len(chunk) def keyfunc(row)

我有一个非常大的CSV文件。7500多万行

我必须每小时将这个.csv文件“发布”到Redis集群中一次。(每小时)

脚本:

import csv
import redis
import random
from redis import StrictRedis
import multiprocessing as mp
import itertools
import time

def worker(chunk):
    return len(chunk)  

def keyfunc(row):
    return row[0] 

def main():
    client = redis.StrictRedis(host='XXXXXXXXX.XX.XXX.X.XXX', port=6379, db=0)
    client1 = redis.StrictRedis(host='XXXXXXXXX.XX.XXX.X.XXX', port=6379, db=0)
    client2 = redis.StrictRedis(host='XXXXXXXXX.XX.XXX.X.XXX', port=6379, db=0)
    list1 =(client, client1, client2)
    pool = mp.Pool()
    largefile = 'Example.csv'
    num_chunks = 10
    results = []
    with open(largefile) as f:
        reader = csv.reader(f)
        chunks = itertools.groupby(reader, keyfunc)
        while True:
            # make a list of num_chunks chunks
            groups = [list(chunk) for key, chunk in
                      itertools.islice(chunks, num_chunks)]
            if groups:
                result = pool.map(worker, groups)
                results.extend(result)
            else:
                break

    key1 = 'AAM_CDF_Traits'
    doc = chunk
    random.choice(list1).publish(key1, pool)
    pool.close()
    pool.join()
    print(results) 

if __name__ == '__main__':

    main()
问题:

这是解决这个问题的正确方法吗?我还有什么办法可以解决这个问题呢

为什么我会有这个错误

回溯(最近一次呼叫最后一次):

文件“/AAM_Redis4.sh”,第47行,在

main()
文件“/AAM_Redis4.sh”,第33行,主

itertools.islice(chunks, num_chunks)]

TypeError:“tuple”对象不是callabl

您可能会遇到错误,因为您使用了内置函数list作为变量名:

list =(client, client1, client2)
稍后,当您调用函数list时,会将其作为变量调用,这可能会导致以下问题:

groups = [list(chunk) for key, chunk in

我完全错过了。谢谢。我可以诚实地说,这种方法花费了我1-2小时到5-7分钟的处理时间。对记忆的影响最小。