我们发布了使用Spark的Python应用程序,以及Python 3.7解释器(python.exe
,所有必要的lib都位于MyApp.exe
附近)
要设置PYSPARK_PYTHON
,我们有一个函数,该函数确定到python.exe
的路径:
os.environ['PYSPARK_PYTHON'] = get_python()
在Windows上PYSPARK_PYTHON
将变成C:/MyApp/python.exe
在Ubuntu上PYSPARK_PYTHON
将变成/opt/MyApp/python.exe
我们启动主/驱动程序节点并在Windows上创建SparkSession
。然后我们在Ubuntu上启动worker节点,但worker失败,原因是:
Job aborted due to stage failure: Task 1 in stage 11.0 failed 4 times, most recent failure: Lost task 1.3 in stage 11.0 (TID 1614, 10.0.2.15, executor 1): java.io.IOException: Cannot run program "C:/MyApp/python.exe": error=2, No such file or directory
当然,ubuntu上没有C:/MyApp/python.exe
如果我正确理解了这个错误,驱动程序中的PYSPARK_PYTHON
将发送给所有工作人员
还尝试在{PYSPARK_PYTHON
更改为/opt/MyApp/python.exe
浏览souce代码时,Python驱动程序代码似乎在^{} 中创建用于运行Python函数的工作项时,将Python可执行路径的值从其Spark上下文中放入:
Python运行程序^{} 然后使用它接收到的第一个工作项中存储的路径来启动新的解释器实例:
基于这一点,恐怕目前不可能在master和worker中对Python可执行文件进行单独的配置。另见问题SPARK-26404的第三条评论。也许您应该向ApacheSpark项目提交RFE
虽然我不是Spark大师,但可能仍然有办法做到这一点,也许可以将
PYSPARK_PYTHON
设置为"python"
,然后确保系统PATH
被相应地配置,以便您的Python可执行文件排在第一位相关问题 更多 >
编程相关推荐