python - DASK 及其 from_pandas 函数的 RAM 问题

标签 python pandas ram dask

我正在尝试在 Python 3.4 中使用 DASK 包来避免大型数据集出现 RAM 问题,但我注意到一个问题。

使用 native 函数“read_csv”,我使用不到 150MB 的 RAM 将大数据集加载到 dask 数据帧中。

使用 PANDAS DB 连接(使用限制和偏移选项)和 dask 函数“from_pandas”读取的相同数据集将我的 ram uo 填充到 500/750 MB。

我不明白为什么会这样,我想解决这个问题。

这里是代码:

def read_sql(schema,tab,cond):

sql_count="""Select count(*) from """+schema+"""."""+tab
if (len(cond)>0):
    sql_count+=""" where """+cond

a=pd.read_sql_query(sql_count,conn)
num_record=a['count'][0]

volte=num_record//10000
print(num_record)

if(num_record%10000>0):
    volte=volte+1

sql_base="""Select * from """+schema+"""."""+tab
if (len(cond)>0):
    sql_base+=""" where """+cond
sql_base+=""" limit 10000"""

base=pd.read_sql_query(sql_base,conn)

dataDask=dd.from_pandas(base, npartitions=None, chunksize=1000000)

for i in range(1,volte):
    if(i%100==0):
        print(i)
    sql_query="""Select * from """+schema+"""."""+tab
    if (len(cond)>0):
        sql_query+=""" where """+cond
    sql_query+=""" limit 10000 offset """+str(i*10000)

    a=pd.read_sql_query(sql_query,conn)

    b=dd.from_pandas(a , npartitions=None, chunksize=1000000)

    divisions = list(b.divisions)
    b.divisions = (None,)*len(divisions)
    dataDask=dataDask.append(b)

return dataDask



a=read_sql('schema','tabella','data>\'2016-06-20\'')

谢谢你帮助我

等待消息

最佳答案

一个 dask.dataframe 由许多 pandas 数据帧组成,或者像 read_csv 这样的函数的情况下,一个按需计算这些数据帧的计划。它通过执行该计划来延迟计算数据帧,从而实现低内存执行。

当使用 from_pandas 时,数据帧已经在内存中,因此 dask.dataframe 几乎无法避免内存爆炸。

在这种情况下,我看到三种解决方案:

关于python - DASK 及其 from_pandas 函数的 RAM 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38180447/

相关文章:

julia - 如何测量 Julia 中的 RAM 消耗和计算时间?

java - 我可以通过转置二维数组来优化我的 java 程序吗?

windows - 工作集和提交大小有什么区别?

python - 从分割图像中获取边界

python - Panda 的数据框将一列拆分为多列

python - 将多个 csv 加载到数据框中的最快方法

python - 如何设置与未使用的分类区间索引相对应的 pandas 数据帧列中的值?

python - 删除重复项,保留最新日期,Pandas 数据框

Python - 对单个元素的更新会影响同一列中的所有元素

python - scikit-learn 的逻辑回归在打印输出时给出关键错误