gpt4 book ai didi

java - 为什么 JavaNGramExample 会失败并显示 "java.lang.ClassNotFoundException: scala.collection.GenTraversableOnce$class"?

转载 作者:行者123 更新时间:2023-11-30 06:23:52 24 4
gpt4 key购买 nike

我正在 Spark 中尝试一个简单的 NGram 示例

https://github.com/apache/spark/blob/master/examples/src/main/java/org/apache/spark/examples/ml/JavaNGramExample.java

这是我的 pom 依赖项

<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.10</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>

下面是示例代码

public class App {
public static void main(String[] args) {
System.out.println("Hello World!");

System.setProperty("hadoop.home.dir", "D:\\del");

SparkSession spark = SparkSession
.builder()
.appName("JavaNGramExample").config("spark.master", "local")
.getOrCreate();


List<Row> data = Arrays.asList(RowFactory.create(0, Arrays.asList("car", "killed", "cat")),
RowFactory.create(1, Arrays.asList("train", "killed", "cat")),
RowFactory.create(2, Arrays.asList("john", "plays", "cricket")),
RowFactory.create(3, Arrays.asList("tom", "likes", "mangoes")));


StructType schema = new StructType(new StructField[] {
new StructField("id", DataTypes.IntegerType, false, Metadata.empty()),
new StructField("words", DataTypes.createArrayType(DataTypes.StringType), false, Metadata.empty()) });

Dataset<Row> wordDataFrame = spark.createDataFrame(data, schema);

NGram ngramTransformer = new NGram().setN(2).setInputCol("words").setOutputCol("ngrams");

Dataset<Row> ngramDataFrame = ngramTransformer.transform(wordDataFrame);
System.out.println(" DISPLAY NGRAMS ");
ngramDataFrame.select("ngrams").show(false);


}
}

运行此代码时出现以下错误。

Exception in thread "main" java.lang.NoClassDefFoundError: scala/collection/GenTraversableOnce$class
at org.apache.spark.sql.types.StructType.<init>(StructType.scala:98)
at com.mypackage.spark.learnspark.App.main(App.java:61)
Caused by: java.lang.ClassNotFoundException: scala.collection.GenTraversableOnce$class
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 2 more

检查了scala的依赖,是scala-library-2.11.8

spark 2.2.0 和我的 scala jar 之间是否存在不一致?

最佳答案

tl;drspark-mllib_2.10 更改为 spark-mllib_2.11,以便 Scala 2.11.8 用于 Spark MLlib 依赖项(并可选择删除 spark-core_2.11 依赖项)。

<小时/>

查看您的pom.xml:

<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-mllib_2.10</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
    Spark 2.2.0 中的
  1. spark-core_2.11 依赖于 Scala 2.11.8,没关系。

  2. Spark 2.2.0 中的
  3. spark-mllib_2.10 依赖于两个不同且不兼容的 Scala 版本 2.10.x2.11.8。这就是问题的根本原因。

确保使用:

  1. Spark 依赖项的 artifactId 具有相同的后缀,即 spark-core_2.11spark-mllib_2.11 (请注意,我将其更改为 2.11)。

  2. 每个 Spark 依赖项中的版本相同。

关于java - 为什么 JavaNGramExample 会失败并显示 "java.lang.ClassNotFoundException: scala.collection.GenTraversableOnce$class"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47616747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com