首页 > 解决方案 > 在驱动程序中作为 PySpark 依赖项添加的模块中的自动重新加载更改

问题描述

addPyFile在 PySpark 和autoreloadJupyter Notebooks 中使用时,我刚刚注意到一个微妙的问题。

发生的情况是我在 PySpark UDF 中使用的模块中有一些代码,因此(据我所知)这些模块需要通过添加作为依赖项addPyFile,以便它们在执行程序上可用。addPyFile我在设置 PySpark 会话后压缩这些文件并使用。

但是,在此之后,这些模块中的更改不会自动重新加载,例如在 IPython/Jupyter Notebook 中工作时。更具体地说,运行

import mypath.mymodule as mm
import imp
imp.reload(mm)

通常会显示模块的路径,例如<module 'mypath.mymodule' from 'C:\\project\\mypath\\mymodule.py'>

但是,在初始化 Spark 并通过 提交压缩文件后addPyFile,上面的代码会输出如下内容:<module 'mypath.mymodule' from 'C:\\Users\\username\\AppData\\Local\\Temp\\spark-....\\userFiles-...\\zipped_modules.zip\\mypath\\mymodule.py'>

也就是说,Spark 似乎切换为使用来自压缩(和缓存)模块(甚至在驱动程序中)的代码,因此原始模块中的更改不会在驱动程序中自动重新加载。

在这种情况下,有没有办法继续自动重新加载驱动程序中模块的更改?

标签: pythonpyspark

解决方案


推荐阅读