已 解决 : Excepción: Python en el trabajador tiene una versión 2.7 diferente a la del controlador 3.6

已 解决 : Excepción: Python en el trabajador tiene una versión 2.7 diferente a la del controlador 3.6, PySpark no se puede ejecutar con diferentes versiones menores. Verifique que las variables de entorno PYSPARK_PYTHON y PYSPARK_DRIVER_PYTHON estén configuradas correctamente.

Al ejecutar el programa del módulo pyspark en el servidor de Alibaba Cloud, el error principal es el anterior

Entorno centos del servidor: python (el predeterminado es python2), python3, es decir, entorno de python dual

La versión instalada de pyspark == 2.1.2, que está instalada en el entorno python3. Tenga en cuenta que la versión de pyspark debe coincidir con la versión de Spark instalada (la versión de Spark instalada es 2.1.1)

Ejecutar como se muestra a continuación: python3 xxx.py informa el siguiente error

[root@way code]# python3 foreach.py 
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
20/12/17 15:30:26 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
20/12/17 15:30:27 WARN Utils: Your hostname, localhost resolves to a loopback address: 127.0.0.1; using 172.16.1.186 instead (on interface eth0)
20/12/17 15:30:27 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
20/12/17 15:30:30 ERROR Executor: Exception in task 0.0 in stage 0.0 (TID 0)
org.apache.spark.api.python.PythonException: Traceback (most recent call last):
  File "/opt/software/spark/python/lib/pyspark.zip/pyspark/worker.py", line 125, 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.

	at org.apache.spark.api.python.PythonRunner$$anon$1.read(PythonRDD.scala:193)
	at org.apache.spark.api.python.PythonRunner$$anon$1.<init>(PythonRDD.scala:234)
	at org.apache.spark.api.python.PythonRunner.compute(PythonRDD.scala:152)
	at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:63)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:323)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:287)
	at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87)
	at org.apache.spark.scheduler.Task.run(Task.scala:99)
	at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:322)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
20/12/17 15:30:30 WARN TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, localhost, executor driver): org.apache.spark.api.python.PythonException: Traceback (most recent call last):
  File "/opt/software/spark/python/lib/pyspark.zip/pyspark/worker.py", line 125, in main
    ("%d.%d" % sys.version_info[:2], version))

Solución:

El informe de error muestra que las variables PYSPARK_PYTHON y PYSPARK_DRIVER_PYTHON en el programa deberían haber llamado python3, pero el python predeterminado es la versión 2, pero pyspark y otras bibliotecas faltan en la versión 2, por lo que se informa un error.

Use el comando which is python3 para encontrar la ubicación de python3 y especifique la versión de Python llamada por las dos variables anteriores en el programa, de la siguiente manera

from pyspark import SparkContext

# 以下三行为新增内容
import os
os.environ["PYSPARK_PYTHON"]="/usr/bin/python3"
os.environ["PYSPARK_DRIVER_PYTHON"]="/usr/bin/python3"

Guardar y ejecutar de nuevo, se puede ejecutar normalmente

Supongo que te gusta

Origin blog.csdn.net/lyw5200/article/details/111316602
Recomendado
Clasificación