dask合并操作失败,原因是内存错误

时间:2018-09-03 08:05:42

标签: dask

Dask合并操作失败,原因是内存错误,我尝试合并两个csv文件,第一个文件大小为6.5 GB,带有48个属性列,第二个文件为315 MB,带有三个属性列,我们进行了此操作在具有8 GB RAM和2个vCPU的服务器(Amazon EC2 t2.large linux redhat)上,在取消作业后,内存开始增加,直到OS终止该作业。之后,我将以下两个键添加到sysctl.conf中,新错误变为“ Memoey错误”和“内存不足”。

  

vm.overcommit_memory = 2   vm.overcommit_ratio = 90

代码快照:

result_df =pd.merge(first_df, second_df, left_index=True , right_index=True)
result_df.to_csv('result*.csv', sep=';')

您是否想念这里的任何东西?如果这是资源问题?还是迟钝的实现?以及对可以使用带有内存的一面磁盘的速度是否有限制。以及我可以进行哪种优化以获得更好的结果。

以下是使用索引和不使用索引的完整代码,但是结果相同,但是请注意,我使用的是单机而不是集群,我的理解是,如果内存不存在,则应该将其写入磁盘足够。

import dask.dataframe as pd 

def build_data_file(): 
first_df = pd.read_csv('/home/lion/du/data/first_df', sep=';', blocksize=10000000,dtype={'user_ID': str}, names=['user_ID', 'att1', 'att2', 'att3','att4','att5','att6','att7','att8','att9','att10','att11','att12','att13','att14', 'att15', 'att16', 'att17', 'att18','att19', 'att20', 'att21','att22','att23', 'att24','att25', 'att26', 'att27','att28', 'att29', 'att30', 'att31','att32', 'att33','att34', 'att35','att36', 'att37','att38','att39', 'att40','att41', 'att42', 'att43','att44','att45','att46', 'att47','att48','att49']) 

second_df = pd.read_csv('/home/lion/du/data/second_df', sep=';', blocksize=10000000,dtype={'user_ID': str}, names=['user_ID', 'att_S_1', 'att_S_2', 'att_S_3']) 

df_final = pd.merge(first_df, second_df, on='user_ID') 
df_final.to_csv('result*.csv', sep=';') 
if name == 'main': build_data_file()

****带有索引

import dask.dataframe as pd
def build_data_file():
first_df = pd.read_csv('/home/lion/du/data/first_df', sep=';', blocksize=10000000,dtype={'user_ID': str},
                                    names=['user_ID', 'att1', 'att2',
                   'att3','att4','att5','att6','att7','att8','att9','att10','att11','att12','att13','att14', 'att15',
                                             'att16', 'att17', 'att18','att19', 'att20', 'att21','att22','att23', 'att24','att25', 'att26', 'att27','att28', 'att29',
                                                 'att30', 'att31','att32', 'att33','att34', 'att35','att36', 'att37','att38','att39', 'att40','att41', 'att42',
                                                  'att43','att44','att45','att46', 'att47','att48','att49']).set_index('user_ID')
    second_df = pd.read_csv('/home/lion/du/data/second_df', sep=';', blocksize=10000000,dtype={'user_ID': str},
                              names=['user_ID', 'att_S_1',
                                     'att_S_2', 'att_S_3']).set_index('user_ID')

    df_final =pd.merge(first_df, second_df, left_index=True , right_index=True)
    df_final.to_csv('result*.csv', sep=';')
if __name__ == '__main__':
    build_data_file()

0 个答案:

没有答案