dask作业因为内存使用而被杀?

时间:2018-01-24 14:26:23

标签: python performance dask

您好我有一个python脚本,它使用dask库来处理一个比物理内存大的数据帧。我注意到如果内存使用率在一段时间内保持在计算机的100%,那么作业将在运行过程中被杀死。

预期吗?我认为数据会溢出到磁盘,并且还有足够的磁盘空间。

有没有办法限制其总内存使用量?感谢

编辑:

我也尝试过:

dask.set_options(available_memory = 12e9)

它不起作用。它似乎没有限制其内存使用量。同样,当内存使用率达到100%时,作业就会被杀死。

2 个答案:

答案 0 :(得分:1)

该行

 ddf = ddf.set_index("sort_col").compute()

实际上是将整个数据帧拉入内存并转换为pandas。您想要删除.compute(),并在调用compute之前应用您想要的任何逻辑(过滤,分组/聚合等),以产生足够小的结果。

要记住的重要一点是,结果输出必须能够适合内存,并且每个工作者正在处理的每个块(加上开销)也需要能够适应内存。

答案 1 :(得分:0)

尝试使用以下方式处理数据:

select c.date, sum(c.sum) from clicks as c join marks as m1 ON m1.click_id = c.id join marks as m2 ON m2.click_id = c.id join marks as m3 ON m3.click_id = c.id where (m1.name = 'utm_source' AND m1.value='test_source1') AND (m2.name = 'utm_medium' AND m2.value='test_medium1') AND (m3.name = 'utm_term' AND m3.value='test_term1') group by date