0

我正在尝试使用以下命令通过 spark shell 运行 scala 脚本: spark-shell -i myScriptFile.scala

当我有单行命令时,我可以让上面的命令工作,但是如果我在脚本中有任何换行符(为了便于阅读),spark-shell(或 REPL?)会将每一行解释为一个完整的操作. 这是我的脚本示例:

import org.apache.spark.sql.types._
import java.util.Calendar
import java.text.SimpleDateFormat

// *********************** This is for Dev *********************** 
val dataRootPath = "/dev/test_data"
// *********************** End of DEV specific paths ***************

val format = new SimpleDateFormat("yyyy-MM-dd")
val currentDate = format.format(Calendar.getInstance().getTime()).toString

val cc_df = spark.read.parquet(s"${dataRootPath}/cc_txns")
    .filter($"TXN_DT" >= date_sub(lit(current_date), 365) && $"TXN_DT" < lit(current_date))
    .filter($"AMT" >= 0)

....

System.exit(0)

使用此脚本运行 spark-shell 时,出现以下错误:

<console>:1: error: illegal start of definition

脚本的语法是正确的,因为如果我启动 shell 并手动将此代码粘贴到 with 中:paste,一切正常。

我试过用反斜杠结束所有多行命令,\但这也不起作用。

有没有人对我如何保持脚本多行但仍然能够将 spark-shell 作为参数传递给它有任何建议?

4

2 回答 2

1

尝试:

val x = {  some statement ... 
         . some statement2 ... 
         . idem ditto 
         . ...
}
于 2020-06-05T19:43:01.033 回答
0

然后您可以:paste粘贴(Ctrl+ V)。粘贴后,在shell中执行Ctrl+ 。D

于 2020-06-05T23:10:18.017 回答