python - Pyspark 在没有 Internet 的集群中使用 .so 文件分发依赖项
问题描述
我想使用 Pyspark 并在无法访问 Internet 的集群中分发一组依赖项。我尝试pip install -t dependencies -r requirements.txt
了然后压缩了依赖项文件夹。我传递了 zipspark.submit.pyFiles
并且它可以工作,除非模块内部有 .so 文件(例如 numpy)。在那种情况下,我会收到此错误。如果在将 PYTHONPATH 指向 zip 文件后打开本地新的 python 控制台,我会得到完全相同的错误:看起来它可以找到除 .so 文件之外的 python 包,因此它与 pyspark 并没有真正的关系,而是与一般的 python 机制有关从 zip 文件加载包。如果我解压缩文件并将 PYTHONPATH 指向解压缩的文件夹,则一切正常。
我已经阅读了这个答案,所以我尝试了 egg 文件,结果相同:在 pip install 到依赖项目标文件夹之后,我使用 setuptools 创建了一个单独的 egg 文件,首先在依赖项文件夹中创建一个 setup.py,像这样:
from setuptools import setup, find_packages
setup(
name = "dependencies",
version = "0.1",
packages = find_packages()
)
然后调用python setup.py bdist_egg
. 我在 pyFiles 参数中分发生成的 .egg 文件,但同样的错误。我尝试创建一个native_libs.txt
文件,在其中手动写入 numpy/core 子文件夹内的 .so 文件的路径,但是当我运行 bdist 命令时似乎没有效果:.so 没有复制到 numpy 子文件夹中鸡蛋,所以我在那里手动复制它们,但没有成功。将 PYTHONPATH 指向 egg 文件,但得到完全相同的错误。
当我创建鸡蛋时,我的 python 版本是 3.7.6,在 Spark 工作人员中是 3.7.7,但我几乎可以肯定这不会导致问题。
有没有办法做到这一点?也许使用与 pyFiles 不同的另一个 spark 参数?
谢谢
注意:此JIRA 票证也与此问题有关。
解决方案
推荐阅读
- c# - 使用 Graph API 将成员添加到 azure Active Directory 中的组会导致 URl 无效错误
- swift - 使用来自另一个结构的指定变量初始化 SwiftUI 结构
- c# - 对于 Regex,如果字符串在短语中,是否可以使用 IsMatch?
- php - 如何将数据从当前页面传递到另一个页面?
- javascript - 如何从 Bootstrap Datepicker 中提取月份
- javascript - 倒计时结束关闭模式
- python - spark sql 中的 Hive 查询
- saml-2.0 - 索赔提供者信任和依赖方信任之间的区别
- python - 在确定 SARIMA 中的顺序和季节性顺序时是否有任何规则?
- javascript - 如何解释以下函数的声明