我正在努力将JAR中的类加载到我的Scala-Spark内核Jupyter笔记本中。我在这个地方有罐子:
/home/hadoop/src/main/scala/com/linkedin/relevance/isolationforest/
内容如下:
-rwx------ 1 hadoop hadoop 7170 Sep 11 20:54 BaggedPoint.scala
-rw-rw-r-- 1 hadoop hadoop 186719 Sep 11 21:36 isolation-forest_2.3.0_2.11-1.0.1.jar
-rw-rw-r-- 1 hadoop hadoop 1482 Sep 11 21:36 isolation-forest_2.3.0_2.11-1.0.1-javadoc.jar
-rw-rw-r-- 1 hadoop hadoop 20252 Sep 11 21:36 isolation-forest_2.3.0_2.11-1.0.1-sources.jar
-rwx------ 1 hadoop hadoop 16133 Sep 11 20:54 IsolationForestModelReadWrite.scala
-rwx------ 1 hadoop hadoop 5740 Sep 11 20:54 IsolationForestModel.scala
-rwx------ 1 hadoop hadoop 4057 Sep 11 20:54 IsolationForestParams.scala
-rwx------ 1 hadoop hadoop 11301 Sep 11 20:54 IsolationForest.scala
-rwx------ 1 hadoop hadoop 7990 Sep 11 20:54 IsolationTree.scala
drwxrwxr-x 2 hadoop hadoop 157 Sep 11 21:35 libs
-rwx------ 1 hadoop hadoop 1731 Sep 11 20:54 Nodes.scala
-rwx------ 1 hadoop hadoop 854 Sep 11 20:54 Utils.scala当我尝试加载IsolationForest类时,如下所示:
import com.linkedin.relevance.isolationforest.IsolationForest
我的笔记本中出现以下错误:
<console>:33: error: object linkedin is not a member of package com
import com.linkedin.relevance.isolationforest.IsolationForest我已经在谷歌上搜索了几个小时,以达到这一点,但无法进一步发展。下一步是什么?
顺便说一下,我正在尝试使用这个包:https://github.com/linkedin/isolation-forest
谢谢。
发布于 2020-09-16 00:54:50
对于Scala:
如果您使用的是spylon-kernel,那么您可以在%%init_spark部分中指定额外的jar,如described in the docs (第一个用于jar文件,第二个用于包,如下所述):
%%init_spark
launcher.jars = ["/some/local/path/to/a/file.jar"]
launcher.packages = ["com.acme:super:1.0.1"]对于Python:
在Jupyter notebook的第一个单元格中,在初始化SparkSession之前,执行以下操作:
import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--jars <full_path_to>/isolation-forest_2.3.0_2.11-1.0.1.jar pyspark-shell'这会将jars添加到PySpark上下文中。但最好使用--packages而不是--jars,因为它还会获取所有必要的依赖项,并将所有内容放入内部缓存中。例如
import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.linkedin.isolation-forest:isolation-forest_2.3.0_2.11:1.0.0 pyspark-shell'您只需要选择与您的PySpark和Scala版本匹配的版本(2.3.x和2.4是Scala 2.11,3.0是Scala 2.12),作为it's listed in the Git repo。
发布于 2020-12-21 23:45:55
我在纯Scala、Jupyter Lab和Almond上使用了以下工具,它们使用Ammonite,不涉及Spark或任何其他繁重的覆盖:
interp.load.cp (os.pwd/"yourfile.jar")上面的代码直接作为语句添加到notebook中,从当前目录加载yourfile.jar。在此之后,您可以从jar导入。例如,如果yourfile是顶级包的名称,则为import yourfile._。我注意到一个警告,在尝试加载之前,应该等待一段时间,直到内核正确启动。如果第一条语句运行得太快(例如,使用restart和run all),那么whol就会挂起。这似乎是一个无关的问题。
当然,您可以构造另一个路径(look over here for the available API)。此外,在上面的ammonite magic imports link下,您还可以找到有关如何从ivy加载包或如何加载Scala脚本的信息。诀窍是使用interp对象和您可以从它访问的LoadJar特征。LoadJar的接口如下:
trait LoadJar {
/**
* Load a `.jar` file or directory into your JVM classpath
*/
def cp(jar: os.Path): Unit
/**
* Load a `.jar` from a URL into your JVM classpath
*/
def cp(jar: java.net.URL): Unit
/**
* Load one or more `.jar` files or directories into your JVM classpath
*/
def cp(jars: Seq[os.Path]): Unit
/**
* Load a library from its maven/ivy coordinates
*/
def ivy(coordinates: Dependency*): Unit
}https://stackoverflow.com/questions/63854636
复制相似问题