2015-04-04 4 views
5

Ich spark-Übermittlung einer Python-Datei, die numpy importiert, aber ich bekomme einen no module named numpy Fehler.Kein Modul namens numpy beim Senden von Sparks

$ spark-submit --py-files projects/other_requirements.egg projects/jobs/my_numpy_als.py 
Traceback (most recent call last): 
    File "/usr/local/www/my_numpy_als.py", line 13, in <module> 
    from pyspark.mllib.recommendation import ALS 
    File "/usr/lib/spark/python/pyspark/mllib/__init__.py", line 24, in <module> 
    import numpy 
ImportError: No module named numpy 

Ich dachte ich in einem Ei für numpy -python-Dateien ziehen würde, aber ich habe Probleme, herauszufinden, wie man das Ei zu bauen. Aber dann fiel mir ein, dass pyspark selbst numpy verwendet. Es wäre albern, meine eigene Version von numpy einzutragen.

Irgendeine Idee auf die passende Sache, hier zu tun?

Antwort

3

Scheint wie Spark eine Version von Python verwendet, die numpy nicht installiert hat. Es könnte sein, weil Sie in einer virtuellen Umgebung arbeiten.

Try this:

# The following is for specifying a Python version for PySpark. Here we 
# use the currently calling Python version. 
# This is handy for when we are using a virtualenv, for example, because 
# otherwise Spark would choose the default system Python version. 
os.environ['PYSPARK_PYTHON'] = sys.executable 
+0

Versuchen Sie, das vollständige SciPy- oder unabhängige NumPy-Paket für die Python-Binärdatei zu installieren, die Sie gerade verwenden: http://www.scipy.org/install.html –

0

Manchmal, wenn Sie bestimmen Bibliotheken importieren, Ihr Namensraum wird verschmutzt mit numpy Funktionen. Funktionen wie min, max und sum sind besonders anfällig für diese Verschmutzung. Suchen Sie im Zweifelsfall nach Anrufen zu diesen Funktionen und ersetzen Sie diese Anrufe durch __builtin__.sum usw. Dies ist manchmal schneller als das Auffinden der Verschmutzungsquelle.

0

Ich habe das durch die Installation von numpy auf allen emr-Knoten durch die Konfiguration eines kleinen Bootstrapping-Skripts, das unter anderem Folgendes enthält, funktioniert.

#!/bin/bash -xe sudo yum install python-numpy python-scipy -y

dann die Bootstrap-Skript konfiguriert ausgeführt werden, wenn Sie Ihren Cluster starten, indem Sie die folgende Option auf den aws emr-Befehl (das folgende Beispiel ein Argument für die Bootstrap-Skript gibt)

--bootstrap-actions Path=s3://some-bucket/keylocation/bootstrap.sh,Name=setup_dependencies,Args=[s3://some-bucket]

Dies kann verwendet werden, wenn ein Cluster automatisch auch von DataPipeline aus eingerichtet wird.