您好我有一个python脚本,它使用dask库来处理一个比物理内存大的数据帧。我注意到如果内存使用率在一段时间内保持在计算机的100%,那么作业将在运行过程中被杀死。
预期吗?我认为数据会溢出到磁盘,并且还有足够的磁盘空间。
有没有办法限制其总内存使用量?感谢
编辑:
我也尝试过:
dask.set_options(available_memory = 12e9)
它不起作用。它似乎没有限制其内存使用量。同样,当内存使用率达到100%时,作业就会被杀死。
答案 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