Spark 2.0 - java.io.IOException:无法运行程序“jupyter”:错误= 2,没有这样的文件或目录

Rom*_*uin 5 java apache-spark

我正在使用 jupyter 笔记本来尝试 Spark。

在我的笔记本中,我尝试了 Kmean:

from pyspark.ml.clustering import KMeans
from sklearn               import datasets
import pandas as pd

spark = SparkSession\
        .builder\
        .appName("PythonKMeansExample")\
        .getOrCreate()

iris       = datasets.load_iris()
pd_df      = pd.DataFrame(iris['data'])
spark_df   = spark.createDataFrame(pd_df, ["features"])
estimator  = KMeans(k=3, seed=1)
Run Code Online (Sandbox Code Playgroud)

一切顺利,然后我拟合模型:

estimator.fit(spark_df)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

16/08/16 22:39:58 ERROR Executor: Exception in task 0.2 in stage 0.0 (TID 24)
java.io.IOException: Cannot run program "jupyter": error=2, No such file or directory

Caused by: java.io.IOException: error=2, No such file or directory
Run Code Online (Sandbox Code Playgroud)

Spark 在哪里寻找 Jupyter?为什么我可以使用jupyter Notebook却找不到它?该怎么办 ?..

fan*_*yst 5

正如代码所示 https://github.com/apache/spark/blob/master/python/pyspark/context.py#L180

self.pythonExec = os.environ.get("PYSPARK_PYTHON", 'python')
Run Code Online (Sandbox Code Playgroud)

所以我认为这个错误是由env变量引起的PYSPARK_PYTHON,它表明每个spark节点的python位置,当pyspark启动时,PYSPARK_PYTHON来自sys env的将被注入到所有sparknodes,这样

  1. 可以通过以下方式解决

    export PYSPARK_PYTHON=/usr/bin/python
    
    Run Code Online (Sandbox Code Playgroud)

    它们在差异节点上是相同的版本。然后开始:

    pyspark
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果本地和集群的差异节点之间存在不同版本的Python,则会出现另一个版本冲突错误。

  3. 您使用的交互式Python版本应该与集群中其他节点的版本相同。

  • 在纱线上运行火花时遇到同样的错误。`export PYSPARK_PYTHON` 对我的情况没有用,有什么办法解决它吗? (3认同)