由于 python 版本,运行 PySpark DataProc 作业时出错

Error while running PySpark DataProc Job due to python version

我使用以下命令创建了一个 dataproc 集群

gcloud dataproc clusters create datascience \
--initialization-actions \
    gs://dataproc-initialization-actions/jupyter/jupyter.sh \

然而,当我提交我的 PySpark 作业时,出现以下错误

Exception: Python in worker has different version 3.4 than that in driver 3.7, PySpark cannot run with different minor versions.Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set.

有什么想法吗?

这是由于 master 和 worker 之间 python 版本的差异。默认情况下,jupyter image 安装最新版本的 miniconda,它使用 python3.7。但是,worker 仍然使用默认的 python3.6。

解决方法: - 在创建主节点时指定 miniconda 版本,即在主节点中安装 python3.6

gcloud dataproc clusters create example-cluster --metadata=MINICONDA_VERSION=4.3.30

注:

  • 可能需要更新以拥有更可持续的环境管理解决方案

我们现在修复了它——感谢 @brotich 的中间解决方法。查看 #300.

中的讨论

PR #306 保持 python 与已安装的相同版本 (3.6),并在所有节点上安装软件包以确保主和工作 python 环境保持相同.

作为副作用,您可以通过将参数传递给 conda init 操作来更改 python 版本来选择 python 版本。例如。 --metadata 'CONDA_PACKAGES="python==3.5"'.

PR #311 将 miniconda 固定到特定版本(当前为 4.5.4),因此我们再次避免此类问题。您可以使用 --metadata 'MINICONDA_VERSION=latest' 来使用始终下载最新 miniconda 的旧行为。

更新 SPARK 环境以使用 PYTHON 3.7:

打开一个新终端并输入以下命令:export PYSPARK_PYTHON=python3.7 这将确保工作节点使用 Python 3.7(与驱动程序相同)而不是默认的 Python 3.4

根据您拥有的 PYTHON 版本,您可能需要做一些 INSTALL/UPDATE ANACONDA:

(安装见:https://www.digitalocean.com/community/tutorials/how-to-install-anaconda-on-ubuntu-18-04-quickstart

确保你有 anaconda 4.1.0 或更高版本。打开一个新终端并通过在新终端中输入来检查您的 conda 版本:

conda --version

正在检查 conda 版本

如果你低于anaconda 4.1.0,输入conda update conda

  1. 接下来我们通过输入
  2. 来检查我们是否有库nb_conda_kernels

conda list

正在检查我们是否有 nb_conda_kernels

  1. 如果您没有看到 nb_conda_kernels,请输入

conda install nb_conda_kernels

正在安装nb_conda_kernels

  1. 如果您正在使用 Python 2 并且想要单独的 Python 3 环境,请输入以下内容

conda create -n py36 python=3.6 ipykernel

py35 是环境的名称。您可以随意命名。

或者,如果您正在使用 Python 3 并且想要一个单独的 Python 2 环境,您可以键入以下内容。

conda create -n py27 python=2.7 ipykernel

py27 是环境的名称。它使用 python 2.7.

  1. 确保python版本安装成功并关闭终端。打开一个新终端并输入 pyspark。您应该会看到新的环境出现。