簡體   English   中英

How do I import singleton object from Scala package in Java?

[英]How do I import singleton object from Scala package in Java?

我正在嘗試在我的 Java 程序中使用從package導入的 ARIMA object (Scala)。 雖然編譯成功,意味着編譯時識別出 ARIMA class,但運行時 ARIMA object 出現NoClassDefFoundError ARIMAModel class 導入沒有問題,因為它是 class。

有什么方法可以使用我的 Java 程序中的 Scala object 嗎?

這是 Scala package 中 object 的源代碼。

文件: .../com/cloudera/sparkts/models/ARIMA.scala

package com.cloudera.sparkts.models

object ARIMA {
    def autoFit(ts: Vector, maxP: Int = 5, maxD: Int = 2, maxQ: Int = 5): ARIMAModel = {
        ...
    }
}

class ARIMAModel(...) {
    ...
}

這是我的 Java 代碼。

文件:src/main/java/SingleSeriesARIMA.java

import com.cloudera.sparkts.models.ARIMA;
import com.cloudera.sparkts.models.ARIMAModel;

public class SingleSeriesARIMA {
    public static void main(String[] args) {
        ... 
        ARIMAModel arimaModel = ARIMA.autoFit(tsVector, 1, 0, 1);
        ...
    }
}

這是錯誤。

Exception in thread "main" java.lang.NoClassDefFoundError: com/cloudera/sparkts/models/ARIMA
at SingleSeriesARIMA.main(SingleSeriesARIMA.java:43)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:729)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:185)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:210)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:124)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: com.cloudera.sparkts.models.ARIMA
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 10 more

我正在使用 Scala 版本 2.11.8 和 Java 1.8

您需要使用--jars選項向 spark 集群提供具有Arima object 的依賴項,如下所示 -

spark-submit --jars <path>/<to>/sparkts-0.4.1.jar --class SingleSeriesARIMA target/simple-project-1.0.jar

這將傳遞其他依賴項以及應用程序 jar 以在spark-runtime可用。

從 java 調用ARIMA object -

ARIMA$.MODULE$.autoFit(tsVector, 1, 0, 1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM