运行 spark-shell 中带有换行符的 scala 脚本
Running scala script with line breaks in spark-shell
我正在尝试使用以下命令通过 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 并使用 :paste
手动粘贴此代码,一切正常。
我试过用反斜杠结束所有多行命令 \
但这也不起作用。
有没有人对我如何保持我的脚本多行但仍然能够将它传递给 spark-shell 作为开始的参数有什么建议?
尝试:
val x = { some statement ...
. some statement2 ...
. idem ditto
. ...
}
您可以执行 :paste
然后粘贴 (Ctrl+V)。粘贴后,在shell.
中执行Ctrl+D
我正在尝试使用以下命令通过 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 并使用 :paste
手动粘贴此代码,一切正常。
我试过用反斜杠结束所有多行命令 \
但这也不起作用。
有没有人对我如何保持我的脚本多行但仍然能够将它传递给 spark-shell 作为开始的参数有什么建议?
尝试:
val x = { some statement ...
. some statement2 ...
. idem ditto
. ...
}
您可以执行 :paste
然后粘贴 (Ctrl+V)。粘贴后,在shell.