PySpark 工作人员在安装包时无法导入包

Posted

技术标签:

【中文标题】PySpark 工作人员在安装包时无法导入包【英文标题】:PySpark worker cannot import packages while they are installed 【发布时间】:2018-07-23 01:34:56 【问题描述】:

我最近在 gcloud DataProc 上设置了一个集群(1 个主节点和 2 个从节点)。 我设法拥有一个带有 PySpark 内核的 jupyter notebook 接口。 只要我的工作人员不必执行需要 NumPy 或 sklearn 等外部包的代码,一切都会正常工作。例如,我收到此错误:

ImportError: No module named 'sklearn'

a bit of the huge error log when I try to use pairwise_distance from sklearn

当我在工作人员上 ssh 并键入时

python
>>> help('modules')

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

当我输入which python 时,我得到一条路径,比如说/opt/conda/bin/python 当我用echo $PYSPARK_PYTHON 检查 PYSPARK_PYTHON 时,我得到了相同的路径。由此我们可以推断出 spark 使用了安装了所有包的“好”版本的 python。所以这不是问题。

我不明白为什么我的工作人员无法使用软件包,因为它们已正确安装并且 PATH 变量看起来不错。

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

对于那些想知道的人,我按照这个link 直到第 4 步在 gcloud 上设置我的环境 PySpark。

【问题讨论】:

您在导入之前是否从笔记本运行了!pip install --upgrade scikit-learn?你确定你使用了正确的解释器from the notebook too? 【参考方案1】:

好的,所以我设法解决了它。

可以说的主要“问题”是我作为集群上的用户连接,我缺乏如此多的特权,尤其是/opt/conda/ 目录。

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

我尝试将pip--user 选项一起使用,它安装了一些东西,但不是我想要的。

此时,我很沮丧,因为我无法像每个人告诉我的那样使用 pipconda 安装软件包,但正如原始帖子中提到的那样,它们看起来已经正确安装了。

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

作为/opt/conda/ 的所有者,我也可以使用conda 安装所有软件包,然后它就起作用了。我的 PySpark Notebook 运行良好。

我不向在他们自己的私有计算机上面临此问题的用户推荐此解决方案,但我的问题是在仅用于 PySpark 的 Google 云中的虚拟机上,因此更改所有权有一天会再次出现在我身上的风险是相当大的低。

如果有人有更好且更清洁的解决方案,请随时在此处发布。

【讨论】:

以上是关于PySpark 工作人员在安装包时无法导入包的主要内容,如果未能解决你的问题,请参考以下文章

Spark 似乎已安装但无法导入 pyspark 模块

在编写自己的 R 包时,我似乎无法正确导入其他包

Pyspark - ImportError:无法从“pyspark”导入名称“SparkContext”

ValueError:尝试在 pyspark 中的非包中进行相对导入/无法找到 kmodes 模块(pyspark)

无法导入 pyspark 统计模块

变压器:导入包时出错。 “ImportError:无法从 'torch.optim.lr_scheduler' 导入名称 'SAVE_STATE_WARNING'”