【发布时间】:2015-12-19 23:05:23
【问题描述】:
我在一个大型集群上运行 Spark 程序(我没有管理权限)。 numpy 未安装在工作程序节点上。因此,我将numpy 与我的程序捆绑在一起,但出现以下错误:
Traceback (most recent call last):
File "/home/user/spark-script.py", line 12, in <module>
import numpy
File "/usr/local/lib/python2.7/dist-packages/numpy/__init__.py", line 170, in <module>
File "/usr/local/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 13, in <module>
File "/usr/local/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 8, in <module>
File "/usr/local/lib/python2.7/dist-packages/numpy/lib/type_check.py", line 11, in <module>
File "/usr/local/lib/python2.7/dist-packages/numpy/core/__init__.py", line 6, in <module>
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 模块?
谢谢。
【问题讨论】:
-
您能展示一下您是如何创建 zip 文件的吗?
-
@zero323:
zip -r ~/numpy.zip /usr/local/lib/python2.7/dist-packages/numpy -
所以你想复制现有的安装?
-
@zero323:是的,现有的
numpy安装已通过运行以下命令安装在Ubuntu机器上:sudo apt-get install python-numpy。 -
也许您可以设置
LD_LIBRARY_PATH以包含multiarray.so所在的路径?您需要在 Python 启动之前执行此操作。
标签: python numpy apache-spark pyspark