为了账号安全,请及时绑定邮箱和手机立即绑定

TypeError: can't pickle _thread._local objects

TypeError: can't pickle _thread._local objects

慕盖茨4494581 2022-01-11 18:24:54
我有一个巨大的 DataFrame,我想使用 dask 处理它以节省时间。问题是我一TypeError: can't pickle _thread._local objects开始运行就陷入这个错误。有人能帮我吗?我编写了一个函数,该函数根据其行处理存储在 DF 中的数据,并使用out = df_query.progress_apply(lambda row: run(row), axis=1)它运行良好。由于这需要很多时间,我开始使用 dask:ddata = dd.from_pandas(df_query, npartitions=3) out = ddata.map_partitions(lambda df: df.apply((lambda row: run(row)), axis=1)).compute(scheduler='processes')问题是,一旦处理开始,我就会收到此错误(经过大量回溯,见下文): TypeError: can't pickle _thread._local objects该run(...)函数执行一些数据操作,包括对数据库的查询。
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

您的run函数可能引用了其范围之外的变量,这些变量正在被捕获到闭包中。确保在函数内部创建了任何文件句柄或数据库连接


坏的:


conn = DBConn(...)

def run(row):

    return conn.do_stuff(row)

好的:


def run(row):

    conn = DBConn(...)

    return conn.do_stuff(row)


查看完整回答
反对 回复 2022-01-11
  • 1 回答
  • 0 关注
  • 396 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信