可以将Datalab与多处理一起使用来扩展Pandas转换吗?

时间:2019-04-09 15:45:13

标签: pandas python-multiprocessing google-cloud-datalab

我尝试使用Google Cloud Datalab扩展Pandas中的数据转换。

在我的机器上,小文件(保留文件的前100000行)都可以正常工作,但是使用完整的8G输入csv文件会导致Memoryerror。

尽管我有一个Datalab VM可以帮助我。我首先尝试在Highmem上使用VM,最大内存为120G。 在那里,我不断收到错误消息:内核似乎已经死亡。它将自动重启。 我在这里找到了一些东西: https://serverfault.com/questions/900052/datalab-crashing-despite-high-memory-and-cpu  但是我没有使用TensorFlow,因此并没有太大帮助。

因此,我尝试了另一种方法,即块处理并在更多内核上并行化。它在我的机器(4核,12 G ram)上运行良好,但是仍然需要数小时的计算。

所以我想使用具有32个内核的Datalab VM来加快速度,但是在5个小时之后,当在本地计算机上已经完成10个线程时,第一个线程仍然没有完成。

非常简单:

是否可以将Datalab用作扩展Pandas转换的方法? 为什么在理论上比本地计算机好得多的VM上我得到最差的结果?

某些代码:

import pandas as pd
import numpy as np
from OOS_Case.create_features_v2 import process
from multiprocessing.dummy import Pool as ThreadPool 



df_pb = pd.read_csv('---.csv')
list_df = []
for i in range(-) :
    df = df_pb.loc[---]
    list_df.append(df)



pool = ThreadPool(4) 
pool.map(process, list_df)

我的流程函数中的所有操作都是纯Pandas和Numpy操作

感谢您可以给我的任何提示,替代方法或最佳实践建议!

2 个答案:

答案 0 :(得分:1)

一年后,我学到了一些有用的最佳实践:

  • 使用Google AI平台,选择构建具有所需CPU数量的VM
  • 使用Dask进行多线程处理
  • 对于Pandas,可以使用pandarallel将.apply()并行化

答案 1 :(得分:0)

GCP Datalab似乎不支持多线程:

每个内核都是单线程的。除非您同时运行多个笔记本,否则多个内核可能不会带来明显的好处。

更多信息,您可以找到here