如何使包可用于 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 的方法,我知道有依赖关系:
- 使用 SBT 管理依赖项,使用
console
启动具有这些依赖项的 REPL
- 使用 Ammonite REPL
您可以创建一个带有 build.sbt
的单独目录,您可以在其中设置
scalaVersion := "2.11.12"
然后复制
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.3.0"
来自 MavenCentral 的片段。然后你可以 运行 使用 sbt console
的 REPL。请注意,这将创建一个 project
和 target
子目录,因此它 "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 将从类路径上的库开始。
我正在尝试熟悉 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 的方法,我知道有依赖关系:
- 使用 SBT 管理依赖项,使用
console
启动具有这些依赖项的 REPL - 使用 Ammonite REPL
您可以创建一个带有 build.sbt
的单独目录,您可以在其中设置
scalaVersion := "2.11.12"
然后复制
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.3.0"
来自 MavenCentral 的片段。然后你可以 运行 使用 sbt console
的 REPL。请注意,这将创建一个 project
和 target
子目录,因此它 "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 将从类路径上的库开始。