如何使包可用于 Scala REPL?

How do I make packages available to the Scala REPL?

我正在尝试熟悉 Scala。我正在使用 macOS。

我已经使用 brew install scala 安装了 scala,安装完成后我可以简单地通过发出 scala 来启动 scala REPL,我在 scala> 提示符下.
我现在想导入一些包,所以我尝试:

import org.apache.spark.sql.Column

毫不奇怪,它失败了

error: object apache is not a member of package org

这是有道理的,它怎么知道从哪里得到那个包裹?问题是,我不知道我需要做什么才能使该软件包可用。我可以从命令行做些什么来 import org.apache.spark.sql.Column?

我在谷歌上搜索了一下,但没有找到任何可以通俗易懂的方式解释的内容。在这里完成 Scala 菜鸟,所以不使用行话的回复将不胜感激。

如果你想使用 spark 的东西,我建议你使用 spark-shell 附带的 spark-installation。我不了解 macOS,所以我无法帮助您在那里安装 Spark。

对于普通的 Scala,我推荐 ammonite http://ammonite.io/#Ammonite-REPL,它包含允许拉取 packages/dependencies 的语法。

您可以使用 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)

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

您应该从 here

下载 spark 二进制文件

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

然后您可以在任何控制台中使用命令 spark-shell

启动它

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

这里有两种启动 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 子目录,因此它 "leaves traces",您不能像独立的 scala-repl 那样使用它。您也可以省略 build.sbt,并通过将它们键入 SBT-shell 本身来添加库依赖项。

或者,您可以只使用专门为此目的创建的 Ammonite REPL

我在 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 Central 中可用。 %1 可能是 scala 脚本(“.sc”扩展名)。但您可以将其留空,REPL 将从类路径上的库开始。