我正在尝试使用以下命令通过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
脚本的语法是正确的,因为如果启动外壳程序并使用:paste
手动粘贴此代码,则一切正常。
我已经尝试用反斜杠\
结束所有多行命令,但这也不起作用。
关于我如何保持脚本多行,但仍然能够将spark-shell作为参数开头,有人有任何建议吗?
尝试:
val x = { some statement ...
. some statement2 ...
. idem ditto
. ...
}
您可以执行:paste
然后粘贴(Ctrl + V)。粘贴后,在外壳中执行Ctrl + D。