我正在尝试使用以下命令在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
注意:文件实际存在
对此有任何帮助。
答案 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中打开一堆生成的源文件而不输入所有名称的时候,我已经做过这件事,但是总的来说,这可能不是一个好主意。