【问题标题】:errors of non-consistent worker and driver python versions on databricks clustersdatabricks 集群上不一致的工作程序和驱动程序 python 版本的错误
【发布时间】:2020-02-22 20:13:46
【问题描述】:

我在 MacBook 上的 Eclipse 上的 databricks 集群上运行 Python3 代码。

当我跑步时:

 spark = SparkSession.builder \
 .master("local") \
 .appName("Word Count") \
 .config("spark.some.config.option", "some-value") \
 .getOrCreate()

 spark.createDataFrame(df_data) # df_data is a pandas dataframe, 

我收到错误:

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

在我的日食中:

PYSPARK_PYTHON = pytohn3
PYSPARK_PYTHON = /Users/a_name/.pyenv/versions/3.6.0/bin/python

所以,我想从 databricks 笔记本中检查 databricks 集群的驱动程序和工作程序的 python 版本。

import sys
print(sys.version)

我明白了:

3.6.5 |Anaconda, Inc.| [GCC 7.2.0]

import subprocess
python_version = subprocess.check_output(['python', '--version'], stderr=subprocess.STDOUT)
print(python_version)

我明白了:

b'Python 2.7.15 :: Anaconda, Inc.\n'

不知道为什么这里有两个python版本? 我应该在 Eclipse 中更改我的 python 代码的 python 版本?

【问题讨论】:

  • 一个问题:您添加了PYSPARK_PYTHON = pytohn3 - 这是仅在评论中的拼写错误还是您的系统实际上有问题?另外,它在命令行中工作吗? (如果是这样,您可能需要确保在 Eclipse 中启动使用相同的环境变量)。

标签: python eclipse pydev databricks azure-databricks


【解决方案1】:

两个 Python 版本都可以,因为这两个检查 Python 版本的代码调用的是你环境的不同 Python,如下所示。

  1. sys.version 代码返回的 Python 版本来自您当前工作的 Python 解释器。

  2. 但是从subprocess.check_output(['python', '--version'], stderr=subprocess.STDOUT) 代码返回的 Python 版本来自您当前操作系统会话的默认 Python 版本。

所以它们通常是不同的,请参阅Python 3.6的sys.versionsubprocess.check_output的描述。

正如问题 Exception: Python in worker has different version 3.6 than that in driver 3.5, PySpark cannot run with different minor versions.Please check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON are correctly set. 所说,您当前的 PySpark 驱动程序需要 Python 3.5 运行时,因此请尝试在您的环境中安装另一个 Python 3.5 运行时,您可以通过下面的代码修复它,而无需仅配置 PYSPARK_PYTHON 变量.

# Ofcourse, I know you are working on MacOS, the value for Linux is just a sample.
import os
os.environ["PYSPARK_PYTHON"]="<the path of Python 3.5 runtime, such as /usr/bin/python3.5 on Linux>"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多