Spark 作业在 java 9 NumberFormatException 上失败,输入字符串 ea

Spark job fails on java 9 NumberFormatException for input string ea

我有一个示例 spark 作业,我可以在 java 8 上成功地 运行 但是当我在 java 9 上 运行 相同的程序时它失败了 NumberFormatException

SparkConf conf = new SparkConf();
conf.setMaster("local[*]").setAppName("java 9 example");
SparkSession session = SparkSession.builder().config(conf).getOrCreate();
Dataset<Row> ds = session.read().text("<xyz path>");
System.out.println(ds.count());

异常详情:

Exception in thread "main" java.lang.NumberFormatException: For input string: "ea" at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.base/java.lang.Integer.parseInt(Integer.java:695) at java.base/java.lang.Integer.parseInt(Integer.java:813) at scala.collection.immutable.StringLike$class.toInt(StringLike.scala:229) at scala.collection.immutable.StringOps.toInt(StringOps.scala:31) at org.apache.spark.SparkContext.warnDeprecatedVersions(SparkContext.scala:353) at org.apache.spark.SparkContext.(SparkContext.scala:186) at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2313) at org.apache.spark.sql.SparkSession$Builder$$anonfun.apply(SparkSession.scala:868) at org.apache.spark.sql.SparkSession$Builder$$anonfun.apply(SparkSession.scala:860) at scala.Option.getOrElse(Option.scala:120) at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:860) at com.ts.spark.session.TestApp.main(TestApp.java:18)

Maven spark 依赖项:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId>
    <version>2.1.0</version>
</dependency>

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.10</artifactId>
    <version>2.1.0</version>
</dependency>

Java 详情:

java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+156)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+156, mixed mode)

在 java 9 上设置 spark 是否需要执行任何其他步骤?谢谢!

Spark 似乎不支持版本号中的非 Int 值(至少对于受支持的 JVM),非早期访问版本不会发生这种情况,ea 细绳。 一旦 Java9 被正确发布,它 运行 可能会正确。

似乎正在调用 scala StringLike 将 "ea"(“9-ea”的一部分)解析为整数。使用的 JDK 9 版本是旧的,随着 JDK 9 发布候选版本的临近,较新的版本删除了“-ea”。因此,获取最新的 JDK 9 下载 (jdk-9+181) 并向 Spark 提交错误以检查解析版本字符串的代码。版本字符串方案的一个很好的参考是 JEP 223 (http://openjdk.java.net/jeps/223).