当前位置:  开发笔记 > 编程语言 > 正文

Numpy和静态链接

如何解决《Numpy和静态链接》经验,为你挑选了1个好方法。

我在一个大型集群上运行Spark程序(为此,我没有管理权限).numpy没有安装在工作节点上.因此,我捆绑numpy了我的程序,但是我收到以下错误:

Traceback (most recent call last):
  File "/home/user/spark-script.py", line 12, in 
    import numpy
  File "/usr/local/lib/python2.7/dist-packages/numpy/__init__.py", line 170, in 
  File "/usr/local/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 13, in 
  File "/usr/local/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 8, in 
  File "/usr/local/lib/python2.7/dist-packages/numpy/lib/type_check.py", line 11, in 
  File "/usr/local/lib/python2.7/dist-packages/numpy/core/__init__.py", line 6, in 
ImportError: cannot import name multiarray

该脚本实际上非常简单:

from pyspark import SparkConf, SparkContext
sc = SparkContext()

sc.addPyFile('numpy.zip')

import numpy

a = sc.parallelize(numpy.array([12, 23, 34, 45, 56, 67, 78, 89, 90]))
print a.collect()

我理解错误的发生是因为numpy动态加载multiarray.so依赖关系,即使我的numpy.zip文件包含multiarray.so文件,动态加载也不能用Apache Spark.为什么这样?那么你如何创建一个numpy静态链接的独立模块呢?

谢谢.



1> zero323..:

您的方法至少存在两个问题,并且两者都可以简化为NumPy是重量级依赖的简单事实.

首先Debian软件包都带有多个依赖包括libgfortran,libblas,liblapacklibquadmath.因此,您不能简单地复制NumPy安装并期望事情会起作用(说实话,如果不是这样的话,您不应该做这样的事情).从理论上讲,你可以尝试使用静态链接来构建它,这样就可以将它与所有依赖项一起发布,但它会遇到第二个问题.

NumPy本身就很大.虽然20MB看起来并不是特别令人印象深刻,并且所有依赖项不应该超过40MB,但每次开始工作时都必须将其运送给工人.你拥有的工人越多,就越糟糕.如果您决定需要SciPy或SciKit,它可能会变得更糟.

可以说这使得NumPy成为一个非常糟糕的候选pyFile方法.

如果您没有直接访问工作者但是存在所有依赖项(包括头文件和静态库),您可以简单地尝试从任务本身在用户空间中安装NumPy(它假定也pip已安装)用这样的东西:

try:
    import numpy as np

expect ImportError:
    import pip
    pip.main(["install", "--user", "numpy"])
    import numpy as np

您将在如何在运行时安装和导入Python模块中找到此方法的其他变体?

由于您可以访问工作人员,因此更好的解决方案是创建单独的Python环境.可能最简单的方法是使用Anaconda,它也可用于打包非Python依赖项,并且不依赖于系统范围的库.您可以使用Ansible或Fabric等工具轻松自动执行此任务,它不需要管理权限,您真正需要的只是bash和某种方式来获取基本安装程序(wget,curl,rsync,scp).

另请参阅:将pyspark中的python模块发送到其他节点?

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有