2015-04-04 39 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自动设置群集时使用。

相关问题