Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
难以使用Java运行Spark SVMModel-Java.lang.CompatibleClassChangeError_Java_Apache Spark - Fatal编程技术网

难以使用Java运行Spark SVMModel-Java.lang.CompatibleClassChangeError

难以使用Java运行Spark SVMModel-Java.lang.CompatibleClassChangeError,java,apache-spark,Java,Apache Spark,我一直在尝试使用Java运行Spark(如果有必要,我将使用IntelliJ作为我的IDE)。经过相当多的修改,我成功地运行了这里找到的calculate pi代码 起初我有以下错误:“java.lang.ClassNotFoundException:[B” 但我用VM中的以下标志修复了它:“-Dsun.lang.ClassLoader.allowArraySyntax=true” 现在,我正试图构建、训练和运行一个SVMModel,正如这里所描述的,但我正在为少量可用的Java文档而挣扎 我正

我一直在尝试使用Java运行Spark(如果有必要,我将使用IntelliJ作为我的IDE)。经过相当多的修改,我成功地运行了这里找到的calculate pi代码

起初我有以下错误:“java.lang.ClassNotFoundException:[B” 但我用VM中的以下标志修复了它:“-Dsun.lang.ClassLoader.allowArraySyntax=true”

现在,我正试图构建、训练和运行一个SVMModel,正如这里所描述的,但我正在为少量可用的Java文档而挣扎

我正在尝试运行以下代码:

import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.mllib.classification.SVMModel;
import org.apache.spark.mllib.classification.SVMWithSGD;
import org.apache.spark.mllib.regression.LabeledPoint;
import org.jblas.DoubleMatrix;

import java.util.ArrayList;
import java.util.List;

public class MinimalBugCode {

    public static void main(String[] args) throws Exception {
        try {
            JavaSparkContext spark = new JavaSparkContext("local","MinimalBugCode");

            int numberOfIterations = 10000;
            double[] theOutputData = { 1.0, 0.0, 0.0, 1.0, 1.0};
            double[][] theInputData = { { 2.2, 3.1, 1.7 }, { 1.9, 2.1, 0.6 }, { 4.7, 0.5, 1.3 }, { 2.6, 2.9, 2.2 }, { 1.5, 4.1, 1.5 }};

            int lengthOfData = theOutputData.length;

            List<LabeledPoint> thePointList = new ArrayList<LabeledPoint>();

            for ( int i=0; i<lengthOfData; i++ ) {
                LabeledPoint thisLabelledPoint = new LabeledPoint( theOutputData[i], theInputData[i] );
                thePointList.add(thisLabelledPoint);
            }

            JavaRDD<LabeledPoint> theSparkRDD = spark.parallelize( thePointList );

            SVMModel theInnerModel = SVMWithSGD.train(theSparkRDD.rdd(), numberOfIterations);

            DoubleMatrix weights = new DoubleMatrix( theInnerModel.weights() );


        } catch (Exception e) {
            e.printStackTrace();
        }
        System.exit(0);
    }
}
此时,它会与以下控制台输出断开:

Exception in thread "main" java.lang.IncompatibleClassChangeError: class scala.reflect.ManifestFactory$$anon$6 has interface scala.reflect.AnyValManifest as super class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at scala.reflect.ManifestFactory$.<init>(Manifest.scala:88)
    at scala.reflect.ManifestFactory$.<clinit>(Manifest.scala)
    at scala.reflect.ClassManifestFactory$.<init>(ClassManifestDeprecatedApis.scala:150)
    at scala.reflect.ClassManifestFactory$.<clinit>(ClassManifestDeprecatedApis.scala)
    at scala.reflect.package$.<init>(package.scala:34)
    at scala.reflect.package$.<clinit>(package.scala)
    at scala.reflect.ClassTag$.<init>(ClassTag.scala:114)
    at scala.reflect.ClassTag$.<clinit>(ClassTag.scala)
    at org.apache.spark.mllib.regression.GeneralizedLinearAlgorithm.run(GeneralizedLinearAlgorithm.scala:139)
    at org.apache.spark.mllib.regression.GeneralizedLinearAlgorithm.run(GeneralizedLinearAlgorithm.scala:123)
    at org.apache.spark.mllib.classification.SVMWithSGD$.train(SVM.scala:133)
    at org.apache.spark.mllib.classification.SVMWithSGD$.train(SVM.scala:173)
    at org.apache.spark.mllib.classification.SVMWithSGD.train(SVM.scala)
    at fiddle.spark.MinimalBugCode.main(MinimalBugCode.java:37)
线程“main”java.lang.CompatibleClassChangeError中出现异常:类scala.reflect.ManifestFactory$$anon$6将接口scala.reflect.AnyValManifest作为超类
位于java.lang.ClassLoader.defineClass1(本机方法)
位于java.lang.ClassLoader.defineClass(ClassLoader.java:760)
位于java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
位于java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
在java.net.URLClassLoader.access$100(URLClassLoader.java:73)
在java.net.URLClassLoader$1.run(URLClassLoader.java:367)
在java.net.URLClassLoader$1.run(URLClassLoader.java:361)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:360)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
位于scala.reflect.ManifestFactory$(Manifest.scala:88)
位于scala.reflect.ManifestFactory$(Manifest.scala)
位于scala.reflect.ClassManifestFactory$(ClassManifestDeprecatedApis.scala:150)
位于scala.reflect.ClassManifestFactory$。(ClassManifestDeprecatedApis.scala)
位于scala.reflect.package$(package.scala:34)
位于scala.reflect.package$(package.scala)
位于scala.reflect.ClassTag$(ClassTag.scala:114)
位于scala.reflect.ClassTag$(ClassTag.scala)
在org.apache.spark.mllib.regression.GeneralizedLinearAlgorithm.run上(GeneralizedLinearAlgorithm.scala:139)
在org.apache.spark.mllib.regression.GeneralizedLinearAlgorithm.run上(GeneralizedLinearAlgorithm.scala:123)
位于org.apache.spark.mllib.classification.SVMWithSGD$.train(SVM.scala:133)
位于org.apache.spark.mllib.classification.SVMWithSGD$.train(SVM.scala:173)
位于org.apache.spark.mllib.classification.SVMWithSGD.train(SVM.scala)
位于fiddle.spark.minimabugcode.main(minimabugcode.java:37)
我发现这些错误消息非常难以理解!我对spark很陌生,但有相当多的Java经验

非常感谢!
-斯塔克



顺便说一句,当我在JavaRDD对象上运行调试器时,它会出现在调试终端中,我可以深入查看(标签、特性)的向量,并进一步查看我放入其中的实际数字,但“数据”属性上的标签本身显示“方法引发了'java.lang.NoSuchMethodError'异常。无法计算scala.collection.JavaConversions$JListWrapper.toString()”-这纯粹是一个表面问题还是更深层次的问题的征兆?

我现在已经解决了我自己的问题,我想我会把它留在这里,以防其他人遇到类似的错误


我所做的:

1) 升级到上周发布的最新Spark 1.0.0。我的项目中包括以下库:

  • spark:spark-core_2.10:1.0.0
  • spark:spark-mllib_2.10:1.0.0
把旧的都拿走了

2) 最初,这会产生如下所述的错误:

基本上,我通过将double[]对象包装在Vectors.dense(…)方法中,将它们调整为Vector,并使用

newRdd=oldRdd.map(r=>Vectors.dense(r))

3) 现在,我的JavaSparkContext行抛出了一个错误,说“签名者信息与同一个包中其他类的签名者信息不匹配”。经过深入研究,这是由于我的库目录中的一个旧版本的库“servlet-api-2.5.0.jar”造成的。我删除了它,并将其替换为“servlet-api-2.5.0.jar”javax.servlet-api-3.0.1.jar”


在这些更改之后,程序编译并运行成功,并且似乎产生了我期望的结果。它还解决了我的postscript中提到的另一个问题,因为我现在可以在调试器中看到RDD数据,并且标签显示正确

我希望这将有助于在未来的人,并感谢所有的开发人员谁一直在工作的火花-这是一个有趣的经验,迄今为止

-斯塔克

Exception in thread "main" java.lang.IncompatibleClassChangeError: class scala.reflect.ManifestFactory$$anon$6 has interface scala.reflect.AnyValManifest as super class
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:455)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:367)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at scala.reflect.ManifestFactory$.<init>(Manifest.scala:88)
    at scala.reflect.ManifestFactory$.<clinit>(Manifest.scala)
    at scala.reflect.ClassManifestFactory$.<init>(ClassManifestDeprecatedApis.scala:150)
    at scala.reflect.ClassManifestFactory$.<clinit>(ClassManifestDeprecatedApis.scala)
    at scala.reflect.package$.<init>(package.scala:34)
    at scala.reflect.package$.<clinit>(package.scala)
    at scala.reflect.ClassTag$.<init>(ClassTag.scala:114)
    at scala.reflect.ClassTag$.<clinit>(ClassTag.scala)
    at org.apache.spark.mllib.regression.GeneralizedLinearAlgorithm.run(GeneralizedLinearAlgorithm.scala:139)
    at org.apache.spark.mllib.regression.GeneralizedLinearAlgorithm.run(GeneralizedLinearAlgorithm.scala:123)
    at org.apache.spark.mllib.classification.SVMWithSGD$.train(SVM.scala:133)
    at org.apache.spark.mllib.classification.SVMWithSGD$.train(SVM.scala:173)
    at org.apache.spark.mllib.classification.SVMWithSGD.train(SVM.scala)
    at fiddle.spark.MinimalBugCode.main(MinimalBugCode.java:37)