2015-04-04 67 views
5

我想提交一個導入numpy的python文件,但我得到一個no module named numpy錯誤。火花提交時沒有名爲numpy的模塊

$ 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 

我在想我會爲numpy -python文件提取一個蛋,但是我很難弄清楚如何生成這個蛋。但後來我發現pyspark本身使用numpy。拉我自己的版本的numpy將是愚蠢的。

任何關於在這裏做適當的事情的想法?

回答

3

它看起來像Spark使用的是沒有安裝numpy的Python版本。這可能是因爲你正在虛擬環境中工作。

試試這個:

# 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

嘗試安裝完整的SciPy或獨立的NumPy包,用於您目前使用的Python二進制文件:http://www.scipy.org/install.html – 2015-10-29 02:56:53

0

有時候,當您導入某些庫,命名空間與numpy功能的污染。諸如min,maxsum等功能特別容易產生這種污染。每當有疑問時,找到對這些功能的呼叫,並用__builtin__.sum等替換這些呼叫。這樣做有時會比定位污染源更快。

0

我通過配置一個包含以下(除此之外)的小引導腳本,在所有emr-nodes上安裝numpy,從而實現了這一目標。

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

然後配置引導腳本被執行時,您可以通過添加下列選項到AWS啓動集羣EMR命令(下面的例子給出了一個說法,以引導腳本)

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

也可以在從DataPipeline自動設置羣集時使用。

相關問題