我正在尝试使用dask读取220 GB的csv文件。该文件的每一行都有一个名称,一个唯一的id,以及它的父ID。每个条目都有多代父母,最终我希望能够重新组装整个树,但是当我尝试找到一个条目的父项时需要15分钟(相比之下,PySpark中的4分钟具有大致相同的节点配置) )。我正在运行四个节点,一个节点上有调度程序,另外三个节点上有12个工作程序。这是我正在使用的代码:
#!/usr/bin/env python
import dask.dataframe as dd
from dask.distributed import Client
client = Client("hostnode:8786")
def find_parent(df,id):
print "searching for",id
newdf = df[df["fid"] == id][["pid","name","fid"]].compute()
print newdf.head()
print "found it",newdf["name"].tolist()[0]
biggie = dd.read_csv("input_file.csv",delimiter=",",names=["fid","pkn","pid","name","updated"],escapechar="\\")
print biggie.head()
find_parent(biggie,"0x240006b93:0x10df5:0x0")
如何提高速度的提示将不胜感激。
答案 0 :(得分:1)
首先,我会看看占用时间最多的是什么。您可能需要查看诊断仪表板中的配置文件选项卡。见http://distributed.readthedocs.io/en/latest/diagnosing-performance.html#statistical-profiling
我怀疑你花了所有时间来解析csv文件。您可能希望使用usecols=
参数来减少需要解析的参数数量。您应该查看pandas.read_csv文档。您还可以考虑使用更少的线程来处理更多进程。解析文本列时,Pandas.read_csv不会释放GIL。