TypeError: can't pickle _thread._local objects

我有一个巨大的 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(...)函数执行一些数据操作,包括对数据库的查询。


慕盖茨4494581
浏览 397回答 1
1回答

开满天机

您的run函数可能引用了其范围之外的变量,这些变量正在被捕获到闭包中。确保在函数内部创建了任何文件句柄或数据库连接坏的:conn = DBConn(...)def run(row):    return conn.do_stuff(row)好的:def run(row):    conn = DBConn(...)    return conn.do_stuff(row)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python