You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark API Scala程序创建时SparkContext初始化报错求助

Spark 3.5.0 + JDK 19 初始化SparkContext 触发IllegalAccessError 解决方案

问题原因

JDK 9及以上引入的模块化系统限制了内部API的访问。Spark的StorageUtils类需要调用Java内部API sun.nio.ch.DirectBuffer,但JDK的java.base模块默认不会将该包暴露给未命名模块(Spark当前jar包未适配Java模块化),因此触发访问权限错误。

解决方法

1. 添加JVM参数(适用于本地IDE运行或集群提交)

通过JVM参数显式允许Spark访问所需的内部API:

  • IDE运行(如IntelliJ):
    在Run Configuration的VM Options中添加:
    --add-exports java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED
    
  • spark-submit提交作业:
    在提交命令中通过--driver-java-options传入参数:
    spark-submit --class ReadCSVFile \
      --driver-java-options "--add-exports java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED" \
      your-application.jar
    

2. 降级JDK版本

如果不想配置JVM参数,可将JDK版本降级至JDK 8。JDK 8没有模块化机制,不会出现此类权限问题,且Spark 3.5.0完全兼容JDK 8。

内容的提问来源于stack exchange,提问作者Ahed Hamad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 13:03:24