【问题标题】:Running scala script with line breaks in spark-shell在 spark-shell 中运行带有换行符的 scala 脚本
【发布时间】:2020-06-05 18:47:43
【问题描述】:

我正在尝试使用以下命令通过 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 时,出现以下错误:

&lt;console&gt;:1: error: illegal start of definition

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

我尝试使用反斜杠 \ 结束所有多行命令,但这也没有用。

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

【问题讨论】:

    标签: apache-spark spark-shell scala-script


    【解决方案1】:

    试试:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢您的建议,但我需要运行一个脚本文件(我在最初的问题中也提到了这一点!)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多