Pyspark:Spyder 中的 SparkContext 定义抛出 Java 网关错误
Pyspark: SparkContext definition in Spyder throws Java gateway error
我想将 Spyder 与 pyspark (spark-2.1.1) 一起使用,但我无法修复一个相当令人沮丧的 Java 错误。在激活 conda 环境(Python 版本为 3.5.3)后,我在 Windows 10 中从命令行启动了 spyder。这是我的代码:
import pyspark
sc = pyspark.SparkContext("local")
file = sc.textFile("C:/test.log")
words = file.flatMap(lambda line : line.split(" "))
words.count()
当我尝试定义 sc
时出现以下错误:
File "D:\spark-2.1.1-bin-hadoop2.7\python\pyspark\java_gateway.py", line 95, in launch_gateway
raise Exception("Java gateway process exited before sending the driver its port number")
Exception: Java gateway process exited before sending the driver its port number
为了完整起见:
如果我在激活 conda 环境后从命令行 运行 pyspark
,它可以正常工作并正确执行字数统计任务。
如果我在 Windows 10 中从开始菜单启动 Spyder App Desktop,一切正常(但我想我无法加载正确的 python 在这种情况下来自我的 conda 环境的模块)。
相关的环境变量似乎没问题:
回显%SPARK_HOME%
D:\spark-2.1.1-bin-hadoop2.7
回声%JAVA_HOME%
C:\Java\jdk1.8.0_121
回显 %PYTHONPATH%
D:\spark-2.1.1-bin-hadoop2.7\python;D:\spark-2.1.1-bin-hadoop2.7\python\lib\py4j-0.10.4 -src.zip; D:\spark-2.1.1-bin-hadoop2.7\python\lib; C:\Users\user\Anaconda3
我已经尝试过 here 提出的解决方案,但对我没有任何效果。非常感谢任何建议!
由于1)是可行的,所以最好在Spyder中使用conda环境。
在首选项中转到 "Python Interpreter" 部分,然后从 "Default (i.e. the same as Spyder's)" 切换到 "Use the following Python interpreter"。
如果你的环境叫spark_env
,Anaconda安装在C:\Program Files\Continnum\Anaconda
下,那么这个环境对应的python配置文件是C:\Program Files\Continnum\Anaconda\envs\spark_env\python.exe
.
此更改后 Spyder startet 中的 python 控制台将出现在您的 conda 环境中(请注意,这不适用于 IPyhton)。
要检查环境变量,您可以使用 python 代码来确保这些变量与您的脚本看到的变量相同:
from os import environ
print(environ['SPARK_HOME'])
print(environ['JAVA_HOME'])
try:
print(environ['PYSPARK_SUBMIT_ARGS'])
except:
print("no problem with PYSPARK_SUBMIT_ARGS") # https://github.com/ContinuumIO/anaconda-issues/issues/1276#issuecomment-277355043
希望对您有所帮助。
我想将 Spyder 与 pyspark (spark-2.1.1) 一起使用,但我无法修复一个相当令人沮丧的 Java 错误。在激活 conda 环境(Python 版本为 3.5.3)后,我在 Windows 10 中从命令行启动了 spyder。这是我的代码:
import pyspark
sc = pyspark.SparkContext("local")
file = sc.textFile("C:/test.log")
words = file.flatMap(lambda line : line.split(" "))
words.count()
当我尝试定义 sc
时出现以下错误:
File "D:\spark-2.1.1-bin-hadoop2.7\python\pyspark\java_gateway.py", line 95, in launch_gateway
raise Exception("Java gateway process exited before sending the driver its port number")
Exception: Java gateway process exited before sending the driver its port number
为了完整起见:
如果我在激活 conda 环境后从命令行 运行
pyspark
,它可以正常工作并正确执行字数统计任务。如果我在 Windows 10 中从开始菜单启动 Spyder App Desktop,一切正常(但我想我无法加载正确的 python 在这种情况下来自我的 conda 环境的模块)。
相关的环境变量似乎没问题:
回显%SPARK_HOME%
D:\spark-2.1.1-bin-hadoop2.7
回声%JAVA_HOME%
C:\Java\jdk1.8.0_121
回显 %PYTHONPATH%
D:\spark-2.1.1-bin-hadoop2.7\python;D:\spark-2.1.1-bin-hadoop2.7\python\lib\py4j-0.10.4 -src.zip; D:\spark-2.1.1-bin-hadoop2.7\python\lib; C:\Users\user\Anaconda3
我已经尝试过 here 提出的解决方案,但对我没有任何效果。非常感谢任何建议!
由于1)是可行的,所以最好在Spyder中使用conda环境。
在首选项中转到 "Python Interpreter" 部分,然后从 "Default (i.e. the same as Spyder's)" 切换到 "Use the following Python interpreter"。
如果你的环境叫spark_env
,Anaconda安装在C:\Program Files\Continnum\Anaconda
下,那么这个环境对应的python配置文件是C:\Program Files\Continnum\Anaconda\envs\spark_env\python.exe
.
此更改后 Spyder startet 中的 python 控制台将出现在您的 conda 环境中(请注意,这不适用于 IPyhton)。
要检查环境变量,您可以使用 python 代码来确保这些变量与您的脚本看到的变量相同:
from os import environ
print(environ['SPARK_HOME'])
print(environ['JAVA_HOME'])
try:
print(environ['PYSPARK_SUBMIT_ARGS'])
except:
print("no problem with PYSPARK_SUBMIT_ARGS") # https://github.com/ContinuumIO/anaconda-issues/issues/1276#issuecomment-277355043
希望对您有所帮助。