运行的scala脚本在spark-shell中带有换行符

问题描述 投票:0回答:2

我正在尝试使用以下命令通过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作为参数开头,有人有任何建议吗?

apache-spark spark-shell scala-script
2个回答
0
投票

尝试:

val x = {  some statement ... 
         . some statement2 ... 
         . idem ditto 
         . ...
}

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.