0

好的,所以我正在运行一个脚本,该脚本依赖于一个复杂的项目,其中包含一堆来自 pyspark 的自定义子模块。我正在运行的工作是我希望它具有针对 Spark 独立实例运行的多个不同版本的代码。

因此,我需要将我的项目放在每个工人的 PYTHONPATH 上,以使其正常工作。如果我将项目的源代码添加到 PYTHONPATH,然后启动独立集群,这会很好。如果我编辑 PYTHONPATH,那么运行时代码将只引用启动时发生的事情,而不是我运行 spark-submit 时有效的内容。

这很重要的原因是因为我希望能够针对多个版本的代码运行作业,这意味着我希望能够动态加载不同版本的代码。在我的脚本中压缩源代码和执行 sc.addPyFile() 之类的操作也不起作用。

有没有办法在 spark-submit 作业之间动态更改我的路径上的 python 代码,而无需重新启动我的独立集群?

4

1 回答 1

2

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(取决于您使用的 python 版本

于 2017-10-21T10:15:25.130 回答