Python 将大型.csv文件处理到Redis中
我有一个非常大的CSV文件。7500多万行 我必须每小时将这个.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)
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分钟的处理时间。对记忆的影响最小。