我正在使用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
这可能是什么原因?有办法解决这个问题吗?
答案 0 :(得分:1)
您的代码中存在两个问题。
对于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