Pyspark 使用新的蟒蛇环境,现在Spark可以';找不到Python解释器文件——如何分发到EMR集群的所有节点?

Pyspark 使用新的蟒蛇环境,现在Spark可以';找不到Python解释器文件——如何分发到EMR集群的所有节点?,pyspark,anaconda,amazon-emr,Pyspark,Anaconda,Amazon Emr,我正在开发一个在AWS EMR集群上运行的PySpark应用程序。开发是在EMR集群上启动的Jupyter实验室环境中进行的 EMR集群有一个Anaconda环境,该环境是为一般用途而设置的。我发现我需要在环境中添加一个包(s3fs),以支持使用pandas将文件写入S3 我没有将包添加到默认的Anaconda环境中,而是克隆了默认环境,并将s3fs包添加到克隆的Anaconda环境中。一旦这个环境被激活,我就会启动Jupyter实验室,并在Jupyter笔记本中运行PypSpark代码。现在,

我正在开发一个在AWS EMR集群上运行的PySpark应用程序。开发是在EMR集群上启动的Jupyter实验室环境中进行的

EMR集群有一个Anaconda环境,该环境是为一般用途而设置的。我发现我需要在环境中添加一个包(
s3fs
),以支持使用pandas将文件写入S3

我没有将包添加到默认的Anaconda环境中,而是克隆了默认环境,并将
s3fs
包添加到克隆的Anaconda环境中。一旦这个环境被激活,我就会启动Jupyter实验室,并在Jupyter笔记本中运行PypSpark代码。现在,为笔记本电脑运行的Python内核正在使用新的克隆Anaconda环境。然而,现在当我运行代码时,我从Spark获得了文件NotFound错误,表明找不到Python解释器。例如:

Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 1 in stage 6.0 failed 4 times, most recent failure: Lost task 1.3 in stage 6.0 (TID 14, ip-103-195-112-137.ec2.internal, executor 2): java.io.IOException: Cannot run program "/home/hadoop/anaconda3/envs/cloned_env/bin/python": error=2, No such file or directory
新的Anaconda环境的文件肯定存在于集群的主节点上,但它们可能在集群的工作节点上丢失,这就是文件未找到消息的来源(即运行PySpark代码时来自工作节点)?如果这是一个问题,那么如何将新的Anaconda环境镜像到EMR集群的所有工作节点?这是我作为一个普通用户不需要访问集群的管理控制台或CloudFormation就能做到的吗

更新: 这看起来像是在启动EMR集群时必须为每个节点执行的操作。在启动时在每个工作节点上运行的脚本中创建Python环境和任何其他库,如下所示。我会试试这个