相关疑难解决方法(0)

pyspark作业参数中--archives,--files,py-files之间的区别是什么

--archives,--files,--py-filessc.addFilesc.addPyFile是相当混乱,有人能解释清楚这些?

apache-spark pyspark pyspark-sql

8
推荐指数
1
解决办法
4783
查看次数

为PySpark捆绑Python3包会导致导入丢失

我正在尝试运行依赖于某些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集群上安装所有可能的库?

python numpy python-3.x apache-spark pyspark

7
推荐指数
1
解决办法
1032
查看次数

标签 统计

apache-spark ×2

pyspark ×2

numpy ×1

pyspark-sql ×1

python ×1

python-3.x ×1