我在Spark执行器上有类似的导入错误,如此处所述,仅使用psycopg2:ImportError: No module named numpy on spark workers
Here它说"虽然pandas太复杂而无法作为* .py文件分发,但您可以为它及其依赖项创建一个egg并将其发送给执行者"。
所以问题是"如何从包及其依赖项创建egg文件?"或轮子,以防鸡蛋遗留下来。在pip有没有这个命令?
答案 0 :(得分:2)
你想制造一个轮子。它们比鸡蛋更新,更强大,并且受到Python 2/3的支持。
对于像numpy这样受欢迎的东西,你不需要自己打扰制作轮子。他们将轮子包装在他们的发行版中,所以你可以下载它。许多python库都有一个轮子作为其分发的一部分。见这里:https://pypi.python.org/pypi/numpy
如果您有点好奇,请参阅此处如何制作一般:https://pip.pypa.io/en/stable/reference/pip_wheel/。
或者,您可以在目标工作者上安装numpy。
修改强>
在您发表评论之后,我认为提及pipdeptree实用程序是恰当的。如果您需要手动查看pip依赖项是什么,此实用程序将为您列出它们。这是一个例子:
$ pipdeptree
3to2==1.1.1
anaconda-navigator==1.2.1
ansible==2.2.1.0
- jinja2 [required: <2.9, installed: 2.8]
- MarkupSafe [required: Any, installed: 0.23]
- paramiko [required: Any, installed: 2.1.1]
- cryptography [required: >=1.1, installed: 1.4]
- cffi [required: >=1.4.1, installed: 1.6.0]
- pycparser [required: Any, installed: 2.14]
- enum34 [required: Any, installed: 1.1.6]
- idna [required: >=2.0, installed: 2.1]
- ipaddress [required: Any, installed: 1.0.16]
- pyasn1 [required: >=0.1.8, installed: 0.1.9]
- setuptools [required: >=11.3, installed: 23.0.0]
- six [required: >=1.4.1, installed: 1.10.0]
- pyasn1 [required: >=0.1.7, installed: 0.1.9]
- pycrypto [required: >=2.6, installed: 2.6.1]
- PyYAML [required: Any, installed: 3.11]
- setuptools [required: Any, installed: 23.0.0
如果您正在使用Pyspark并需要打包您的依赖项,则pip无法自动为您执行此操作。 Pyspark有自己的依赖管理,pip一无所知。据我所知,你能做的最好的事情就是列出依赖关系,然后手工推送它们。
另外,Pyspark并不依赖于numpy或psycopg2,所以如果你所知道的pip是你的Pyspark版本,那么pip可能不会告诉你你需要它们。您已经介绍了这种依赖性,因此您负责将其交给Pyspark。
作为旁注,我们使用引导脚本来安装我们的依赖项(如numpy),然后再启动集群。它似乎运作良好。这样你就可以在脚本中列出一次你需要的库,然后就可以忘掉了它。
HTH。
答案 1 :(得分:2)
您可以使用wheel
安装pip install wheel
。
然后使用python setup.py bdist_wheel
创建.whl。您可以在python包的根目录的dist
目录中找到它。如果你想要python 2和python 3的单个.whl文件,你可能还想传递--universal
。