Pyspark - 工作人员和驱动程序中的不同 Python 版本

Posted

技术标签:

【中文标题】Pyspark - 工作人员和驱动程序中的不同 Python 版本【英文标题】:Pyspark - different Python version in workers & driver 【发布时间】:2017-11-29 09:22:14 【问题描述】:

我正在 python3 环境中使用 pyspark。我有一个数据框,我正在尝试将一列密集的 vectos 拆分为多个列值。 我的 df 是这样的:

df_vector = kmeansModel_2.transform(finalData).select(['scalaredFeatures', 
                                                       'prediction'])
df_vector.show()

+--------------------+----------+
|    scalaredFeatures|prediction|
+--------------------+----------+
|[0.56785108466505...|         0|
|[1.41962771166263...|         0|
|[2.20042295307707...|         0|
|[0.14196277116626...|         0|
|[1.41962771166263...|         0|
+-------------------------------+

好吧,为了完成我的任务,我使用了以下代码:

def extract(row):
    return (row.prediction, ) + tuple(row.scalaredFeatures.toArray().tolist())

df = df_vector.rdd.map(extract)toDF(["prediction"])

不幸的是,我收到了一个错误:

Py4JJavaError: An error occurred while calling 
z:org.apache.spark.api.python.PythonRDD.runJob.
: org.apache.spark.SparkException: Job aborted due to stage failure: 
Task 0 in stage 52.0 failed 1 times, most recent failure: Lost task 
0.0 in stage 52.0 (TID 434, localhost, executor driver): 
org.apache.spark.api.python.PythonException: Traceback (most recent 
call last):
 File "pyspark/worker.py", line 123, in main
("%d.%d" % sys.version_info[:2], version))
Exception: Python in worker has different version 2.7 than that in 
driver 3.6, PySpark cannot run with different minor versions.Please 
check environment variables PYSPARK_PYTHON and PYSPARK_DRIVER_PYTHON 
are correctly set.

有没有人可以帮助我完成这项任务?谢谢!

【问题讨论】:

您能否打开spark-env.sh 文件并检查PYSPARK_PYTHONPYSPARK_DRIVER_PYTHON 环境变量是否设置正确? 【参考方案1】:

如果您使用 PyCharm,您可以添加 PYSPARK_PYTHON 和 PYSPARK_DRIVER_PYTHON 来运行/调试配置。

【讨论】:

解决此问题的最佳和最直接的解决方案 这是在运行单元测试用例时解决问题的最正确答案【参考方案2】:
    在终端检查 python 版本 - python --version 获取 root 用户权限。在终端类型上 - sudo su 记下 root 用户密码 执行此命令切换到 python 3.6 - update-alternatives --install /usr/bin/python python /usr/bin/python3 1 检查python版本 - python --version 完成。

【讨论】:

以上是关于Pyspark - 工作人员和驱动程序中的不同 Python 版本的主要内容,如果未能解决你的问题,请参考以下文章

Hive:通过 Hue 插入表格产生的文件数量与 pyspark 不同

python / pyspark 版本的 Jupyter 问题

如何使用 PySpark、SparkSQL 和 Cassandra?

PySpark 执行程序库何时会与驱动程序不同?

Pyspark - 基于数据框中的 2 列的不同记录

在 PySpark 的两个不同 pyspark.sql.dataframes 中的两列中创建一个 pyspark.sql.dataframe