我使用 Ambari 在 Spark-env.sh 中设置了 PYSPARK_PYTHON=python3,当我在命令行上尝试“pyspark”时,它会使用 Python 3.4.3 运行。但是,当我使用 Yarn 集群模式提交作业时,它使用 Python 2.7.9 运行。如何让它使用 Python 3?
您需要提供 python3 的完整路径,例如:
subprocess.call(['export PYSPARK_PYTHON=/usr/local/bin/python2.7'],shell=True)
说明:在Python驱动程序中,SparkContext使用Py4J来启动JVM并创建JavaSparkContext。 Py4J 仅在驱动程序上用于 Python 和 Java SparkContext 对象之间的本地通信;大数据传输是通过不同的机制执行的。
Python 中的 RDD 转换映射到 Java 中的 PythonRDD 对象的转换。在远程工作计算机上,PythonRDD 对象启动 Python 子进程并使用管道与它们通信,发送用户的代码和要处理的数据。
解决方案:
在创建 Spark 会话之前,使用 Python 中的环境变量,就像下面的示例代码片段中一样:
从 pyspark.sql 导入 SparkSession os.environ['PYSPARK_PYTHON'] = sys.executable os.environ['PYSPARK_DRIVER_PYTHON'] = sys.executable # 初始化 Spark 会话 火花 = SparkSession.builder \ .appName("字符串到 CSV") \ .getOrCreate()