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).
我有一个示例 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).