我有一个巨大的 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)
添加回答
举报
0/150
提交
取消