![](/img/trans.png)
[英]Why does my code take so long to write CSV file in Dask Python
[英]Why does running compute() on a filtered Dask dataframe take so long?
我正在使用这个读取数据: ddf1 = dd.read_sql_table('mytable', conn_string, index_col='id', npartitions=8)
当然,由于延迟计算,这会立即运行。 这个表有几亿行。
接下来,我想过滤这个 Dask 数据框:
ddf2 = ddf1.query('some_col == "converted"')
最后,我想将其转换为 Pandas 数据帧。 结果应该只有大约 8000 行:
ddf3 = ddf2.compute()
但是,这需要很长时间(约 1 小时)。 我能否就如何大幅加快速度获得任何建议? 我试过使用.compute(scheduler='threads')
,改变分区的数量,但到目前为止都没有工作。 我究竟做错了什么?
首先,您可以使用 sqlalchemy 表达式语法对查询中的过滤器子句进行编码,并在服务器端进行过滤。 如果数据传输是您的瓶颈,那么这就是您的最佳解决方案,尤其是过滤器列已编入索引。
根据您的数据库后端,sqlalchemy 可能不会释放 GIL,因此您的分区无法在线程中并行运行。 你得到的只是线程之间的争用和额外的开销。 您应该对进程使用 分布式调度程序。
当然,请看看你的CPU和内存使用情况; 使用分布式调度程序,您还可以访问诊断仪表板。 您还应该关心每个分区在内存中的大小。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.