在sparkshell中运行带换行符的scala脚本

1sbrub3j  于 2021-05-29  发布在  Spark
关注(0)|答案(2)|浏览(1137)

我正在尝试使用以下命令通过spark shell运行scala脚本: spark-shell -i myScriptFile.scala 当我使用单行命令时,我可以让上面的命令工作,但是如果脚本中有任何换行符(为了可读性),sparkshell(或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并用 :paste ,一切正常。
我尝试过用反斜杠结束所有多行命令 \ 但这也不管用。
有没有人对我如何保持我的脚本多行,但仍然能够通过它的Spark壳作为一个参数开始有什么建议?

ve7v8dk2

ve7v8dk21#

尝试:

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

k3fezbri2#

你能做到的 :paste 然后粘贴(ctrl+v)。粘贴后,在shell中执行ctrl+d。

相关问题