DASK及其from_pandas函数的RAM问题

DASK及其from_pandas函数的RAM问题

问题描述:

我试图在Python 3.4中使用DASK包,以避免大数据集的RAM问题,但我发现了一个问题。DASK及其from_pandas函数的RAM问题

使用本机功能“read_csv”我使用少于150MB的RAM将大数据集加载到dask数据帧中。

使用PANDAS DB Connection(使用限制和偏移选项)和dask功能“from_pandas”读取的数据集填充我的公羊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是由许多大熊猫dataframes或者,如在功能,如read_csv的情况下计划按需计算这些数据帧。它通过执行该计划来懒惰地计算数据帧来实现低内存执行。

使用from_pandas时,数据帧已经在内存中,所以dask.dataframe可以做的很少,以避免内存泄漏。

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

+0

谢谢,我会尽快尝试这种方法,然后我会给你回复。 –