提问者:小点点

PySpark worker无法在安装包时导入包


我最近设置了一个群集(1个主群集)

ImportError: No module named 'sklearn'

当我尝试使用sklearn的成对距离时,出现了一点巨大的错误日志

当我在worker上ssh并键入

python
>>> help('modules')

我可以看到所有的软件包都安装正确,所以这不是问题。

当我键入which python时,我会得到一个路径,比如说/opt/conda/bin/python,当我用echo$PYSPARK\u python检查PYSPARK\u python时,我会得到相同的路径。由此我们可以推断spark使用的是python的“好”版本,它安装了所有的软件包。所以这不是问题所在。

我不明白为什么我的工作人员不能使用包,因为它们已经正确安装,而且PATHs变量似乎很好。

有什么线索吗?我有点迷茫和绝望,所以我可能遗漏了信息,请不要犹豫。

对于那些想知道的人,我一直遵循这个链接,直到第4步才在gcloud上设置我的环境PySpark。


共1个答案

匿名用户

好吧,所以我设法修好了它。

可以说,主要的“问题”是我作为集群上的用户进行了连接,并且我缺乏这样的特权,尤其是/pt/conda/目录。

因此,当我使用pipconda安装软件包时,它失败了。

我尝试使用带有--user选项的pip,它安装了东西,但不是我想要的地方。

在这一点上,我被激怒了,因为我不能像每个人告诉我使用pipconda那样安装包,但是正如在最初的帖子中提到的,它们看起来已经被正确安装了。

由于特权使我无法有效地使用pipconda,并且由于这是云中某个地方的虚拟机,我决定使用sudo chown更改/opt/conda/目录的ownershp...

作为/opt/conda/的所有者,我也可以用conda安装所有的软件包,并且它在安装之后就工作了。我的PySpark笔记本运行得很好。

我不推荐这个解决方案给在自己的私人机器上面临这个问题的用户,但我的问题是在谷歌云中的虚拟机上,仅用于PySpark,所以改变所有权的风险有一天会回到我身边,这是相当低的。

如果有人有更好更干净的解决方案,可以在这里发布。