Python脚本退出,任务退出,返回代码为-9,如何解决这个问题?

Python脚本退出,任务退出,返回代码为-9,如何解决这个问题?,python,memory,airflow,Python,Memory,Airflow,我不知道这个错误是什么意思,有些人说这是内存错误,我不确定,因为这个错误不是显式的,但是我加载的表很大,有一百万行 以下是脚本中发生错误的部分: 快照配置文件 df_snapshot_profiles=加载_表'snapshot_profiles',conn def return_keyx,钥匙: 尝试: 返回x[键] 除: 一无所获 df_快照_配置文件['is_manager']=df_快照_配置文件[payload]。应用 lambda x:return\u keyx,'is\u mana

我不知道这个错误是什么意思,有些人说这是内存错误,我不确定,因为这个错误不是显式的,但是我加载的表很大,有一百万行

以下是脚本中发生错误的部分:

快照配置文件 df_snapshot_profiles=加载_表'snapshot_profiles',conn def return_keyx,钥匙: 尝试: 返回x[键] 除: 一无所获 df_快照_配置文件['is_manager']=df_快照_配置文件[payload]。应用 lambda x:return\u keyx,'is\u manager' df_snapshot_profiles_actual=df_snapshot_profiles.loc[:, ['profile_id','date']] df_快照_配置文件_实际值。排序_值['profile_id','date',inplace=True df_snapshot_profiles_actual=df_snapshot_profiles_actual.groupby “配置文件id”。最大重置索引 df_snapshot_profiles.drop ['id','payload','version','company_id','inserted_at','updated_at'], 轴=1, 原地=真 df_snapshot_profiles_actual=df_snapshot_profiles_actual.merge df_snapshot_profiles,on=['date','profile_id',how='left' df\u快照\u配置文件\u实际。删除“日期”,轴=1,在位=True df=df.mergedf\u snapshot\u profiles\u actual,on='profile\u id',how='left' del df_快照_配置文件 不包括在测试中使用的商业银行 df_companys=df.groupby'company_name'。计数 df_companys.reset_indexinplace=True df_companys=df_companys[df_companys['user_id']>2] df_companys.sort_值'user_id',升序=False companys=listdf_companys.company_name df['check_company']=df['company_name']。applylambda x:'T' 如果公司中的x为其他“F” df=df[df['check_company']=='T'] df.删除“检查公司”,轴=1,在位=True 下面是加载表并打印内存使用情况的脚本:

def使用: 进程=psutil.Processos.getpid 返回进程。内存信息[0]/float2**20 def load_表格,conn: 打印xf'{usage}Mb' 打印xf'loading table{table}' 光标=连接光标 cursor.executef'select*来自{ORIGIN_SCHEMA}.{table};' df=cursor.fetchall cursor.executef' 从信息_schema.columns中选择列_name,其中table_name='{table}'; ' labels=cursor.fetchall 标签列表=[] 对于标签中的标签: 标签列表。追加标签[0] df=pd.DataFrame.from_recordsdf,columns=label_list 返回df
有没有一种方法可以通过减少内存使用或其他方式来避免错误。它应该是内存不足的问题。您可以在批处理模式下扩展内存或将部分工作从coreload工作中切换出来

如果您有预算,请扩展内存。100万行*可怕的字符串长度每列1000=1M*1K=1G内存用于数据加载。当合并数据帧或转换数据帧时,您需要额外的内存,所以16G应该可以

如果你是专家,尝试核心模式,这意味着在硬盘上工作

dask是核心模块之外的一个模块。计算机处于批处理模式。缓慢但仍然有效。 使用数据库进行一些功能工作。我发现大多数数据库都可以像熊猫一样做类似的工作,尽管需要复杂的SQL代码。 祝你好运。
如果你喜欢我的答案,请投赞成票。

我通过实现服务器端游标解决了这个问题,并分块获取信息,如下所示:

serverCursor=conn.cursorserverCursor serverCursor.executef'select*来自{ORIGIN_SCHEMA}.{table};' df=[] 尽管如此: records=serverCursor.fetchmanysize=50000 df=df+记录 如果没有记录: 打破 serverCursor.close