我有一个示例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());
例外详细信息:
线程“main”中的异常java.lang.NumberFormatException:用于输入 string:“ea”at java.base / java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 在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) 在scala.collection.immutable.StringOps.toInt(StringOps.scala:31)at org.apache.spark.SparkContext.warnDeprecatedVersions(SparkContext.scala:353) 在org.apache.spark.SparkContext。(SparkContext.scala:186)at org.apache.spark.SparkContext $ .getOrCreate(SparkContext.scala:2313) 在 org.apache.spark.sql.SparkSession $生成器$$ anonfun $ 7.适用(SparkSession.scala:868) 在 org.apache.spark.sql.SparkSession $生成器$$ anonfun $ 7.适用(SparkSession.scala:860) 在scala.Option.getOrElse(Option.scala:120)at org.apache.spark.sql.SparkSession $ Builder.getOrCreate(SparkSession.scala:860) 在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版“9-ea”
Java(TM)SE运行时环境(版本9-ea + 156)
Java HotSpot(TM)64位服务器VM(构建9-ea + 156,混合模式)
在java 9上设置spark需要遵循的其他步骤吗?谢谢!
答案 0 :(得分:6)
似乎scala StringLike被调用来解析&#34; ea&#34; (&#34; 9-ea&#34;的一部分)作为整数。使用的JDK 9版本是旧版本,新版本已删除&#34; -ea&#34;随着JDK 9发布候选人的临近。因此,获取最新的JDK 9下载(jdk-9 + 181)并向Spark提交一个错误,以检查解析版本字符串的代码。版本字符串方案的一个很好的参考是JEP 223(http://openjdk.java.net/jeps/223)。
答案 1 :(得分:4)
Spark似乎不支持版本号中的非Int
值(至少对于支持的JVM),非早期访问版本不会发生这种情况,ea
字符串。
一旦Java9正确发布,它将可能正确运行。