【发布时间】:2020-03-16 20:10:27
【问题描述】:
我正在使用以下方式读取数据:
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'),改变分区的数量,但到目前为止没有一个工作。我做错了什么?
【问题讨论】:
-
大概是因为它做了很多工作吧?
-
如果我有错误的印象,请原谅我,但我认为 Dask 应该大幅加快速度?
-
可能。你把它比作什么替代品?几亿行是很多数据。你的设置到底是什么?计算集群?还是你的笔记本电脑?
dask不是魔法。 -
我将其与通过 Pandas 将整个表加载到内存中进行比较。我的设置是我的笔记本电脑,它有四个内核,但我也在具有高内存的 EC2 实例上尝试过这个,我仍然表现出类似的性能问题,这让我相信我没有正确进行配置
-
好吧,只用 pandas 需要多长时间?您能否为您的问题添加更多详细信息?
标签: python pandas parallel-processing dask dask-dataframe