如何为Scala REPL提供包?

时间:2018-05-08 09:08:32

标签: scala read-eval-print-loop

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

我已经使用brew install scala安装了scala,这是无忧无虑的,一旦完成,我只需在scala发出scala>即可启动scala REPL }提示 我现在想要导入一些包,所以我尝试:

import org.apache.spark.sql.Column

并且毫不奇怪它失败了

  

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

这是有道理的,它怎么知道从哪里获得该包?事实是,我不知道我需要做些什么来制作这个包。我可以从命令行做些什么来让我import org.apache.spark.sql.Column

我已经google了一下,但没有找到任何以无术语的方式解释的东西。在这里完成Scala noob,所以不受欢迎的反应将不胜感激。

5 个答案:

答案 0 :(得分:1)

您可以使用classpath使lib可用,即在本地下载jar并使用以下命令(此处我使用Apache IO lib从scala提示符移动文件)< / p>

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)

答案 1 :(得分:1)

以下是两种使用我所知的依赖项启动REPL的方法:

  1. 使用SBT管理依赖关系,使用console启动具有这些依赖关系的REPL
  2. 使用Ammonite REPL
  3. 您可以使用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

答案 2 :(得分:0)

如果你想使用火花东西,我建议你使用火花装置附带的火花壳。我不知道macOS所以我无法帮助你安装Spark那里。

对于普通的Scala,我建议使用包含语法的ammonite http://ammonite.io/#Ammonite-REPL来提取包/依赖项。

答案 3 :(得分:0)

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

您应该从here

下载spark二进制文件

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

然后你可以使用命令spark-shell

在任何控制台中启动它

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

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