--archives,--files,--py-files和sc.addFile和sc.addPyFile是相当混乱,有人能解释清楚这些?
我正在尝试运行依赖于某些python3库的PySpark作业.我知道我可以在Spark Cluster上安装这些库,但由于我正在重新使用群集进行多个作业,我想将所有依赖项捆绑在一起并通过--py-files指令将它们传递给每个作业.
为此,我使用:
pip3 install -r requirements.txt --target ./build/dependencies
cd ./build/dependencies
zip -qrm . ../dependencies.zip
Run Code Online (Sandbox Code Playgroud)
这有效地压缩了在根级别使用的所需包中的所有代码.
在我,main.py我可以导入依赖项
if os.path.exists('dependencies.zip'):
sys.path.insert(0, 'dependencies.zip')
Run Code Online (Sandbox Code Playgroud)
并将.zip添加到我的Spark上下文中
sc.addPyFile('dependencies.zip')
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
但出于某种原因,这将在Spark Cluster上转移到某种依赖地狱
比如跑步
spark-submit --py-files dependencies.zip main.py
在main.py(或类)我想要使用熊猫的地方.它将触发此错误的代码:
Traceback(最近一次调用最后一次):
在job_module = importlib.import_module('spark.jobs.%s'%args.job_name)中输入文件"/Users/tomlous/Development/Python/enrichers/build/main.py",第53行...
文件"",第978行,在_gcd_import中
文件"",第961行,在_find_and_load中
文件"",第950行,在_find_and_load_unlocked中
文件"",第646行,在_load_unlocked中
文件"",第616行,在_load_backward_compatible中
文件"dependencies.zip/spark/jobs/classify_existence.py",第9行,in
文件"dependencies.zip/enrich/existence.py",第3行,in
文件"dependencies.zip/pandas/ 初始化 py"为19行,在
ImportError:缺少必需的依赖项['numpy']
看着熊猫,__init__.py 我看到了类似的东西__import__(numpy)
所以我认为numpy没有加载.
但是,如果我改变我的代码以显式调用numpy函数,它实际上发现numpy,但不是它的一些dependecies
import numpy as np
a = np.array([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)
代码返回
Traceback(最近一次调用最后一次):
文件"dependencies.zip/numpy/core/ 初始化的.py",第16行,在
ImportError:无法导入名称'multiarray'
所以我的问题是:
我应该如何将python3库与我的spark作业捆绑在一起,以便我不必在Spark集群上安装所有可能的库?