无法通过变量加载存储在Scala中文件中的变量

时间:2019-02-12 08:34:36

标签: scala apache-spark

我正在尝试使用以下命令在Spark Shell中从文件系统加载scala文件:

:加载“文件路径”

这很好用->

scala> :load /User/Mohit/file.scala
Loading /User/Mohit/file.scala...
data_site: String = http://download.cms.gov/
download_file_name: String = data.zip
database_table: String = NPES
data_main_file: String = data_pfile
data_prac_loc: String = pl_pfile_
data_other_name: String = othername_pfile_
data_exclusion: String = FileHeader.csv
checking: String = checked

但是当我尝试通过变量加载此路径时,它给了我下面的错误:

scala> val check = "/User/Mohit/file.scala"
check: String = /User/Mohit/file.scala

scala> :load check
That file does not exist

注意:文件实际存在

对此有任何帮助。

1 个答案:

答案 0 :(得分:3)

这是不完全可能的,因为REPL中的:load命令没有使用String作为参数,并且实际上不是普通的Scala方法(例如我们根本没有在REPL中定义def load(in: String) = ???。冒号表示这是一个REPL命令,并且REPL命令的参数未作为Scala代码评估,因此这里的check只是文件名check,而不是您定义的Scala变量

可以像这样以编程方式加载文件,但这有点棘手,并且不能保证该方法可跨Scala版本使用。如果您在当前目录中有一个文件foo.scala,如下所示:

val message = "hello world"

println(message)

然后,您可以在REPL中执行以下操作:

scala> val fooSource = "foo.scala"
fooSource: String = foo.scala

scala> :power
Power mode enabled. :phase is at typer.
import scala.tools.nsc._, intp.global._, definitions._
Try :help or completions for vals._ and power._

scala> r.loadCommand(fooSource)
Loading foo.scala...
message: String = hello world
hello world
res0: $r.r.Result = Result(true,Some(:load foo.scala))

scala> message
res2: String = hello world

…其中r:power引入的特殊变量,可让您以编程方式访问REPL的交互式循环。在我想在REPL中打开一堆生成的源文件而不输入所有名称的时候,我已经做过这件事,但是总的来说,这可能不是一个好主意。