如何将包添加到Scala REPL中?

3

我正在尝试熟悉Scala。我使用的是macOS操作系统。

我已经使用brew install scala安装了Scala,这个过程非常简单,一旦完成,我只需输入scala就可以启动Scala REPL,并进入scala>提示符。
现在我想要导入一些包,因此我尝试:

import org.apache.spark.sql.Column

毫不意外的是,它失败了,显示如下错误:

错误: 对象apache在包org中不是成员

这很有道理,因为它不知道从哪里获取该软件包。问题是,我不知道需要做什么才能使该软件包可用。是否有任何可以从命令行执行的操作来允许我导入 org.apache.spark.sql.Column

我已经在谷歌上搜索了一些内容,但没有找到任何以非技术术语的方式解释的内容。作为一个完全的Scala新手,我将非常感激非技术术语的回答。

5个回答

3
以下是我知道的两种启动 REPL 带依赖的方法:
  1. 使用 SBT 管理依赖,使用 console 启动一个带有这些依赖的 REPL
  2. 使用 Ammonite REPL

你可以创建一个单独的目录,并在其中创建一个 build.sbt,然后在该文件中设置依赖。
scalaVersion := "2.11.12"

然后复制

libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.3.0"

从MavenCentral获取代码片段。然后您可以使用sbt console运行REPL。请注意,这将创建projecttarget子目录,因此它“留下痕迹”,您不能像独立的scala-repl一样使用它。您也可以省略build.sbt,通过将它们键入SBT-shell本身,添加库依赖项。或者,您可以直接使用为此目的创建的Ammonite REPL

对我来说最有用的答案。谢谢。 - jamiet

2

您可以使用 classpath 使库可用,即将jar包下载到本地并使用以下命令(在这里我正在使用Apache IO库将文件从scala提示符移动)

C0:Desktop pvangala$ scala -cp /Users/pvangala/Downloads/commons-io-2.6/commons-io-2.6.jar
Welcome to Scala 2.12.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_161).
Type in expressions for evaluation. Or try :help.

scala> import java.io.File
import java.io.File

scala> val src = new File("/Users/pvangala/Downloads/commons-io-2.6-bin.tar")
src: java.io.File = /Users/pvangala/Downloads/commons-io-2.6-bin.tar

scala> val dst =  new File("/Users/pvangala/Desktop")
dst: java.io.File = /Users/pvangala/Desktop

scala> org.apache.commons.io.FileUtils.moveFileToDirectory(src, dst, true)

这没有帮助,我从哪里获取.jar文件呢?请理解我在这方面完全是个新手。 - jamiet
谢谢你,Puneeth,非常有用。 - jamiet

0

我在Windows中做了以下操作:

for /f "tokens=*" %%a in ('java -jar coursier fetch -p "com.lihaoyi::requests:0.2.0" "com.lihaoyi::upickle:0.7.5"') do set SCP=%%a

scala -nc -classpath %SCP% %1 %2 %3

你可以使用任意数量的其他库,而不是这里列出的两个库。但是这些库必须在Maven中央仓库中可用。 %1 可以是一个Scala脚本(扩展名为“.sc”)。但是你也可以将其留空,REPL将会使用类路径上的库启动。


0
如果你想使用Spark相关的东西,我建议你使用与Spark安装一起提供的spark-shell。我不熟悉macOS,所以不能帮你解决在那里安装Spark的问题。
对于普通的Scala编程,我推荐使用包含了允许拉取软件包/依赖项的语法的Ammonite http://ammonite.io/#Ammonite-REPL

谢谢,但我想尝试不使用单独安装Spark来完成这个。我会看一下Ammonite。 - jamiet

0

如果你想使用Spark,应该使用spark-shell而不是Scala REPL。它几乎具有相同的行为,但默认情况下包含所有Spark依赖项。

你应该从这里下载Spark二进制文件。

然后,如果你使用Linux,应该创建指向已下载文件夹的变量SPARK_HOME,并将其bin文件夹包含在PATH中。

然后你可以在任何控制台中使用命令spark-shell启动它。

Windows中,我不确定,但我认为你应该有一个spark-shell.cmd文件或类似的东西,你可以用它来启动spark-shell。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接