Anaconda PyCharm环境初始化Spark Session报Py4JJavaError错误
问题环境说明
- 操作系统:Windows
- 开发环境:Anaconda搭配PyCharm,Java环境通过
conda install -c cyclus java-jdk命令安装在Anaconda虚拟环境中 - 版本信息:pyspark 2.4.4,Python 3.10.4,Java版本参考截图:

问题现象
初始化Spark Session时执行如下代码:
findspark.init() spark = SparkSession \ .builder \ .appName("CustomerChurn") \ .master("local") \ .config() \ .getOrCreate()
触发如下报错:
Py4JJavaError: An error occurred while calling o16.set. : java.lang.NullPointerException at org.apache.spark.SparkConf.set(SparkConf.scala:106) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) at py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:357) at py4j.Gateway.invoke(Gateway.java:282) at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132) at py4j.commands.CallCommand.execute(CallCommand.java:79) at py4j.ClientServerConnection.waitForCommands(ClientServerConnection.java:182) at py4j.ClientServerConnection.run(ClientServerConnection.java:106) at java.lang.Thread.run(Unknown Source)
触发原因
报错直接原因是代码中无参调用了.config()方法。Spark的config()方法要求至少传入配置键、配置值两个有效参数,空参调用时传入底层的参数为null,org.apache.spark.SparkConf.set方法接收到null值后直接抛出空指针异常,和Java环境安装、PySpark版本兼容性无直接关联。
修复方法
根据实际需求二选一即可:
- 不需要额外自定义Spark配置时,直接删除代码行里的
.config()即可,修正后的初始化代码如下:
findspark.init() spark = SparkSession \ .builder \ .appName("CustomerChurn") \ .master("local") \ .getOrCreate()
- 需要自定义Spark配置时,必须在
config()内传入合法的键值对参数,例如设置Shuffle分区数的写法为.config("spark.sql.shuffle.partitions", "4"),禁止留空参数调用。
补充提示:pyspark 2.4.4官方适配最高Python版本为3.7,当前使用的Python 3.10版本后续运行可能出现语法兼容、类库调用错误,若后续遇到其他运行异常,可将虚拟环境Python版本降级至3.7,或升级pyspark至3.3.0及以上版本适配Python 3.10。
内容的提问来源于stack exchange,提问作者Paul Corcoran
相关产品推荐
相关产品推荐

