当前位置: 首页 > 面试题库 >

我似乎无法在Spark上使用--py文件

赵俊晤
2023-03-14
问题内容

我在Spark上使用Python时遇到问题。我的应用程序具有一些依赖项,例如numpy,pandas,astropy等。我无法使用virtualenv创建具有所有依赖项的环境,因为群集上的节点除HDFS外没有任何公共的挂载点或文件系统。因此,我坚持使用spark- submit --py-files。我将站点程序包的内容打包到一个ZIP文件中,然后提交与--py- files=dependencies.zipoption一样的作业(如在Spark
executor节点上安装Python依赖项的最简单方法中建议的那样)。但是,群集上的节点似乎仍然看不到内部模块,并且ImportError在导入numpy时会抛出此类错误。

File "/path/anonymized/module.py", line 6, in <module>
    import numpy
File "/tmp/pip-build-4fjFLQ/numpy/numpy/__init__.py", line 180, in <module>   
File "/tmp/pip-build-4fjFLQ/numpy/numpy/add_newdocs.py", line 13, in <module>
File "/tmp/pip-build-4fjFLQ/numpy/numpy/lib/__init__.py", line 8, in <module>
    #
File "/tmp/pip-build-4fjFLQ/numpy/numpy/lib/type_check.py", line 11, in <module>
File "/tmp/pip-build-4fjFLQ/numpy/numpy/core/__init__.py", line 14, in <module>
ImportError: cannot import name multiarray

当我切换到virtualenv并使用本地pysparkshell时,一切正常,因此依赖项就在那里。有谁知道,什么可能导致此问题以及如何解决?

谢谢!


问题答案:

为了使这种依赖分发方法能够与编译扩展一起使用,我们需要做两件事:

  1. 在与目标集群相同的操作系统上运行pip install(最好在集群的主节点上)。这样可确保兼容的二进制文件包含在您的zip中。
  2. 将归档文件解压缩到目标节点上。这是必需的,因为Python不会从zip文件导入已编译的扩展名。(https://docs.python.org/3.8/library/zipimport.html

使用以下脚本创建依赖项zip将确保您与系统上已安装的任何软件包隔离。假设已安装virtualenvrequirements.txt并存在于当前目录中,并dependencies.zip在根级别输出包含所有依赖项的a

env_name=temp_env

# create the virtual env
virtualenv --python=$(which python3) --clear /tmp/${env_name}

# activate the virtual env
source /tmp/${env_name}/bin/activate

# download and install dependencies
pip install -r requirements.txt

# package the dependencies in dependencies.zip. the cd magic works around the fact that you can't specify a base dir to zip
(cd /tmp/${env_name}/lib/python*/site-packages/ && zip -r - *) > dependencies.zip

现在就可以部署,解压缩依赖项并将其包含在PYTHONPATH中

spark-submit \
  --master yarn \
  --deploy-mode cluster \
  --conf 'spark.yarn.dist.archives=dependencies.zip#deps' \
  --conf 'spark.yarn.appMasterEnv.PYTHONPATH=deps' \
  --conf 'spark.executorEnv.PYTHONPATH=deps' \
.
.
.

spark.yarn.dist.archives = dependencies.zip#deps
分发您的zip文件并将其解压缩到一个名为deps

spark.yarn.appMasterEnv.PYTHONPATH = deps
spark.executorEnv.PYTHONPATH = deps
包括depsPYTHONPATH中用于主服务器和所有工作程序的目录

--deploy-mode集群
集群上 运行主执行器,因此可以选择依赖项



 类似资料:
  • 我在Spark上使用Python时遇到问题。我的应用程序有一些依赖项,如numpy、pandas、astropy等。我无法使用virtualenv创建具有所有依赖项的环境,因为集群上的节点除了HDFS之外没有任何公共挂载点或文件系统。因此,我一直坚持使用。我将站点包的内容打包在一个ZIP文件中,并使用

  • 我有一个非常简单的超文本标记语言文件,其中有一个按钮。当单击此按钮时,函数loadDoc()在javascript文件(ajax.js)中运行。带有IDajax_text的div被更改为“单击”。到目前为止还不错。 现在,我试图对一个php文档进行ajax调用。php文档应该响应“Hello World!”。我试图通过使用警报(alert(msg))来显示此消息。php文档与我的HTML文档位于同

  • 问题内容: 我似乎无法理解QueryDSL的elasticsearch方面。以下是我的查询对象以及我的数组的映射。我正在尝试将它们放入基于标签的多面导航中。每个“元素”将在标签数组中关联多个标签[并非所有元素都具有标签。一些将有一个空数组。]。每个标签都是具有id和tag属性的对象。 我尝试了嵌套的构面方法,并得到“标签未嵌套”的错误,因此我在下面尝试了此方法。我没有收到错误,但是返回JSON中没

  • 如果我尝试上载文档文件,则会出现以下错误“上载路径似乎无效”。我将路径替换为绝对路径,然后我也得到了这个错误。请告诉我如何解决这个问题`

  • 所以我不知道如何让桌子在雪花中旋转。我试图在这里为帮助页面建模https://docs.snowflake.com/en/sql-reference/constructs/pivot.html。 枢轴输出 sql文本:

  • 我不能使用vqmod。当ı单击管理面板中的vqmod时,它会显示 VQMod似乎没有正确生成vqcache文件 我还使用与汽车相关的产品xml。是这件事造成的?我不知道。 还有一些产品页面说 注意:未定义索引:product_info in/home/elmaicom/domains/elmacimarketi。com/public\u html/vqmod/vqcache/vq2-catalog