dask - 处理大数组时计算速度很慢

标签 dask

我正在尝试使用 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")

关于如何加快速度的提示将不胜感激。

最佳答案

首先,我会看看什么是占用最多时间的。您可能需要查看诊断仪表板中的配置文件选项卡。见 http://distributed.readthedocs.io/en/latest/diagnosing-performance.html#statistical-profiling

我怀疑您将所有时间都花在解析 csv 文件上。您可能想使用 usecols=参数以减少需要解析的参数数量。为此,您应该查看 pandas.read_csv 文档。您还可以考虑使用更少的线程使用更多的进程。 Pandas.read_csv 在解析文本列时不会释放 GIL。

关于dask - 处理大数组时计算速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48456396/

相关文章:

python - Dask get_dummies 不转换变量

dask - 使用 dask.delayed 和 pandas.DataFrame 将 dask.bag 字典转换为 dask.dataframe

python - Pandas 与考拉并行应用(pyspark)

python - Dask 分布式 - 客户端在启动时导入 numpy

python - Dask 线程如何与 OpenBLAS/MKL/……交互?

python - dask read_sql从MYSQL查询时出错

python - Dask dataframe - 根据分隔符将列拆分为多行

dask - 如何在 Dask 分布式 SSHCluster 中正确设置工作端口?

python - Str 在 Dask Dataframe 中拆分并展开

python - 在新列中添加唯一标识符,直到另一列满足条件