PySpark worker在安装时无法导入包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PySpark worker在安装时无法导入包相关的知识,希望对你有一定的参考价值。

我最近在gcloud DataProc上建立了一个集群(1个主服务器和2个从服务器)。我设法有一个带有PySpark内核的jupyter笔记本界面。只要我的工作人员不必执行需要外部包(如NumPy或sklearn)的代码,一切都会正常工作。例如,我收到此错误:

ImportError: No module named 'sklearn'

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

当我ssh on the workers and type

python
>>> help('modules')

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

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

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

有线索吗?我有点失落和绝望所以我可能会忽略信息,请不要犹豫。

对于那些想知道的人,我跟着这个link直到第4步在gcloud上建立我的环境PySpark。

答案

好的,所以我设法修复它。

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

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

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

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

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

作为qazxsw poi的所有者,我允许我用qazxsw poi安装所有包装,然后就可以了。我的PySpark笔记本运行得很好。

我不建议在他们自己的私人计算机上遇到此问题的用户使用此解决方案,但我的问题是在Google云端的虚拟机上仅用于PySpark,因此更改所有权的风险将在一天后回到我这里的风险非常低。

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

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

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

查找“pyspark.worker”的模块规范时出错(ModuleNotFoundError:没有名为“pyspark”的模块)

在Pyspark中使用时,具有静态文件依赖性的python包无法读取静态文件

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

Spark master 会自动将其他库复制到 worker 中吗?

使用常规 Jupyter Notebook 导入 PySpark 包