已解决:例外:ワーカーのPythonのバージョン2.7はドライバー3.6のバージョンと異なります

已解决:例外:ワーカーのPythonのバージョン2.7がドライバー3.6のPythonと異なるため、PySparkを異なるマイナーバージョンで実行できません。環境変数PYSPARK_PYTHONとPYSPARK_DRIVER_PYTHONが正しく設定されていることを確認してください。

pysparkモジュールプログラムをAlibabaCloudサーバーで実行すると、コアエラーは上記のようになります

サーバーcentos環境:python(デフォルトはpython2)、python3、つまりデュアルpython環境

python3環境にインストールされているpyspark == 2.1.2のインストールバージョン。pysparkバージョンはインストールされているsparkバージョンと一致する必要があることに注意してください(インストールされているsparkバージョンは2.1.1です)。

以下に示すように実行します。python3xxx.pyは次のエラーを報告します

[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))

解決:

エラーレポートは、プログラムの変数PYSPARK_PYTHONおよびPYSPARK_DRIVER_PYTHONがpython3を呼び出す必要があることを示していますが、デフォルトのpythonはバージョン2ですが、pysparkおよびその他のライブラリがバージョン2にないため、エラーが報告されます。

which is python3コマンドを使用してpython3の場所を見つけ、プログラム内の上記の2つの変数によって呼び出されるpythonバージョンを次のように指定します。

from pyspark import SparkContext

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

保存して再実行すると、正常に実行できます

おすすめ

転載: blog.csdn.net/lyw5200/article/details/111316602