我刚开始使用IPython笔记本中的Load Balancer功能。
我要做的是分发在多个核心上加载大型csv文件的功能。
以下是创建负载平衡视图的示例代码:
from IPython.parallel import Client
cluster = Client()
lb_view = cluster.load_balanced_view()
然后我尝试通过跟随发货机来阅读带有pandas的csv
@lb_view.parallel(block=True)
def read_csv(f):
import pandas as pd
data = pd.read_csv(f, iterator=True, chunksize=1e6)
df = [chunk.groupby(by='ip_address').count() for chunk in data]
return pd.concat(df)
失败并出现非常奇怪的错误(好像该文件不存在)
CParserError: Passed header=0 but only 0 lines in file
我接下来尝试使用以下代码片段来检查是否在引擎上找到了文件
@lb_view.parallel(block=True)
def read_csv(f):
import os
return os.path.exists(f)
输出
[True,
True,
True,
True,
True,
True,
False,
False,
False,
False,
True,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
False,
True,
False,
False,
False]
有31个结果?一些True
和一些False
。我的群集在8个引擎(8个核心)上运行,所以我很困惑上面的结果意味着什么。使用多个内核读取csv的正确方法是什么?
(我使用负载平衡视图的原因是因为我尝试以通常的方式读取csv而我的CPU会跳到100%)
当然,文件确实存在,因为尝试在没有负载平衡视图的情况下读取它
pd.read_csv(f, nrows=5)
返回预期结果
ip_address channel_spend channels
0 100.0.0.131 1302.56 oo
1 100.0.0.144 55257.44 ooooooooooooooooooooooooooooooooooooo
2 100.0.0.92 1131.20 o
3 100.0.103.102 6059.20 oooo
4 100.0.103.111 6857.76 ooooooooo
谢谢。