在Running unit test with Spark 3.3.0 on Java 17 failed with IllegalAccessError: class StorageUtils cannot access class sun.nio.ch.DirectBuffer 中提出了类似的问题,但该问题(和解决方案)仅与单元测试有关。对我来说 Spark 正在破坏程序的实际运行。
根据Spark 概述,Spark 可与 Java 17 配合使用。我在 Windows 10 上使用 Temurin-17.0.4+8 (build 17.0.4+8),包括 Maven 中的 Spark 3.3.0,如下所示:
<scala.version>2.13</scala.version>
<spark.version>3.3.0</spark.version>
...
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我尝试运行一个简单的程序:
final SparkSession spark = SparkSession.builder().appName("Foo Bar").master("local").getOrCreate();
final Dataset<Row> df = spark.read().format("csv").option("header", "false").load("/path/to/file.csv");
df.show(5);
Run Code Online (Sandbox Code Playgroud)
这到处都是:
Caused by: java.lang.IllegalAccessError: class org.apache.spark.storage.StorageUtils$ (in unnamed module @0x59d016c9) cannot access class …Run Code Online (Sandbox Code Playgroud) 这里有一些解决方案
Windows Spark 错误 java.lang.NoClassDefFoundError:无法初始化类 org.apache.spark.storage.StorageUtils
上述错误可能对应于以下异常:
java.lang.IllegalAccessError: class org.apache.spark.storage.StorageUtils$ (in unnamed module @0x12a94400) cannot access class sun.nio.ch.DirectBuffer (in module java.base) because module java.base does not export sun.nio.ch to unnamed module
Run Code Online (Sandbox Code Playgroud)
切换回 Java 11 或更低版本对我来说不是一个解决方案。Java 17 如何解决这个问题?