You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cloudera QuickStart VM 5.8中让PySpark使用Python3.6?

解决Spark 1.6.0 + Python 3.6的PySpark启动报错问题

这个报错的核心原因是Spark 1.6.0自带的py4j版本(0.9)太老旧,和Python 3.6的标准库不兼容——Python 3.6对collections.namedtuple的调用要求新增了verbose、rename、module这几个关键字参数,但Spark 1.6的pyspark/serializers.py里的封装逻辑没跟上这个变化,导致调用时参数缺失。

下面是具体的解决步骤:

解决方案步骤

1. 替换Spark自带的旧py4j包

Spark 1.6默认的py4j版本无法适配Python3.6,我们需要换成兼容的版本(比如py4j-0.10.7,这个版本既适配Python3.6,又能和Spark1.6正常协作):

  • 定位Spark的Python库目录:/usr/lib/spark/python/lib/
  • 删除旧的py4j压缩包:
    sudo rm /usr/lib/spark/python/lib/py4j-0.9-src.zip
    
  • 下载兼容的py4j版本到目标目录:
    sudo wget -P /usr/lib/spark/python/lib/ https://repo1.maven.org/maven2/net/sourceforge/py4j/py4j/0.10.7/py4j-0.10.7.zip
    

    提示:如果wget无法使用,也可以先下载到本地再传到VM,或者用curl替代执行下载。

2. 配置永久生效的PYSPARK_PYTHON环境变量

为了避免每次启动都手动执行export命令,我们把配置写入用户的bash配置文件:

  • 编辑~/.bashrc文件:
    vi ~/.bashrc
    
  • 在文件末尾添加一行:
    export PYSPARK_PYTHON=python3.6
    
  • 让配置立即生效:
    source ~/.bashrc
    

3. 验证PySpark启动

现在直接运行pyspark命令,应该能正常进入Python3.6的PySpark Shell,且SparkContext(sc)会自动初始化:

pyspark

正常情况下会看到类似如下的输出,且不会再出现之前的TypeError:

Python 3.6.3 (default, Dec 31 2017, 07:08:36)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-18)] on linux
Type "help", "copyright", "credits" or "license" for more information.
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 1.6.0
      /_/

Using Python version 3.6.3 (default, Dec 31 2017 07:08:36)
SparkContext available as sc, HiveContext available as sqlContext.
>>>

额外注意事项

  • 绝对不要修改系统默认的Python2.6.6,CentOS系统确实依赖它运行核心组件,我们只是让PySpark单独使用Python3.6,完全不影响系统全局环境。
  • 如果替换py4j-0.10.7后仍有问题,可以尝试py4j-0.10.4到0.10.9之间的版本,这些版本都和Python3.6兼容。

内容的提问来源于stack exchange,提问作者Ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:49:07