Używam programów Spark na dużym klastrze (dla którego nie mam uprawnień administracyjnych). numpy
nie jest zainstalowany na węzłach roboczych. Stąd ja pakiecie numpy
z moim programem, ale pojawia się następujący błąd:Numpy i statyczne łączenie
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
Skrypt jest całkiem prosta:
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()
Rozumiem, że błąd występuje, ponieważ numpy
dynamicznie ładuje multiarray.so
zależność i nawet jeśli mój plik numpy.zip
zawiera plik multiarray.so
, to jednak dynamiczne ładowanie nie działa z Apache Spark
. Dlaczego tak? A w jaki sposób tworzysz samodzielny moduł numpy
z łączeniem statycznym?
Dzięki.
można pokazać, jak utworzyć plik zip? – zero323
@ zero323: 'zip -r ~/numpy.zip/usr/local/lib/python2.7/dist-packages/numpy' – abhinavkulkarni
Próbujesz skopiować istniejącą instalację? – zero323