如何在 pyspark 应用程序中动态更改 PYTHONPATH
How to dynamically change PYTHONPATH in pyspark app
好的,所以我正在 运行ning 一个脚本,该脚本依赖于一个复杂的项目,其中有一堆来自 pyspark 的自定义子模块。我 运行ning 的工作是我希望它有几个不同版本的代码 运行ning 针对 Spark 独立实例。
所以,我需要将我的项目放在每个工作人员的 PYTHONPATH 上才能运行。如果我将我的项目的源代码添加到 PYTHONPATH,然后启动独立集群,这会很好地工作。如果我编辑 PYTHONPATH,那么 运行 时间代码将仅指启动时发生的事情,而不是我 运行 spark-submit.
时有效的事情
这很重要的原因是因为我希望能够针对多个版本的代码执行 运行 作业,这意味着我希望能够动态加载不同版本的代码。压缩我的源代码和在我的脚本中执行 sc.addPyFile() 之类的操作也不起作用。
有没有办法在不重启我的独立集群的情况下,在我的 spark-submit 作业之间的路径上动态更改 python 代码?
最简单的方法是在导入模块之前修改sys.path
。例如:
import sys
sys.path.insert(0, '/path/to/module/you/want/to/use/this/time/modulename')
import modulename
但请记住,此路径必须存在于您所有的工作节点上,spark 不会为您复制库。
如果您需要在导入模块后更改 sys.path
,您将需要使用 reload/imp/ipmortlib
(取决于 what version of python do you use)
好的,所以我正在 运行ning 一个脚本,该脚本依赖于一个复杂的项目,其中有一堆来自 pyspark 的自定义子模块。我 运行ning 的工作是我希望它有几个不同版本的代码 运行ning 针对 Spark 独立实例。
所以,我需要将我的项目放在每个工作人员的 PYTHONPATH 上才能运行。如果我将我的项目的源代码添加到 PYTHONPATH,然后启动独立集群,这会很好地工作。如果我编辑 PYTHONPATH,那么 运行 时间代码将仅指启动时发生的事情,而不是我 运行 spark-submit.
时有效的事情这很重要的原因是因为我希望能够针对多个版本的代码执行 运行 作业,这意味着我希望能够动态加载不同版本的代码。压缩我的源代码和在我的脚本中执行 sc.addPyFile() 之类的操作也不起作用。
有没有办法在不重启我的独立集群的情况下,在我的 spark-submit 作业之间的路径上动态更改 python 代码?
最简单的方法是在导入模块之前修改sys.path
。例如:
import sys
sys.path.insert(0, '/path/to/module/you/want/to/use/this/time/modulename')
import modulename
但请记住,此路径必须存在于您所有的工作节点上,spark 不会为您复制库。
如果您需要在导入模块后更改 sys.path
,您将需要使用 reload/imp/ipmortlib
(取决于 what version of python do you use)