我正在使用 jupyter notebook 来计算多个 csv 文件中某个值的出现次数。我有大约 60 个 csv 文件,每个大约 1GB 大。为了有效地循环它们,我使用了多线程。但是,每当我执行以下代码时,内核就会不断死亡:
from multiprocessing.dummy import Pool as ThreadPool
files = glob.glob(path + '/*.csv')
def func(f):
df = pd.read_csv(f)
df = df[df['key'] == 1]
return df['key'].value_counts()
pool = ThreadPool(4)
results = pool.map(func, files)
pool.close()
pool.join()
results
这可能是什么原因?有没有办法解决这个问题?
您的代码中有两个问题。
对于 Python,您实际上是通过使用 multiprocessing.dummy 中的 Pool 来使用多线程而不是多处理。如果您想使用多处理,请更改为以下内容:
from multiprocessing import Pool
但是正如你提到的,有~60G的数据恐怕你的本地计算机无法处理这个?
我相信您需要一个强大的集群来完成这项任务(不再有大熊猫)。所以你可能需要考虑像 Spark 这样的东西。
df = spark.read.csv(your_file_list, header=True)
df = df.filter(df.Key == 1)
df.head(5) # you can use df.collect() if the resultset if not too large
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句