Запуск scala-скрипта с разрывами строк в Spark-Shell

Я пытаюсь запустить scala-скрипт через искровую оболочку, используя следующую команду:spark-shell -i myScriptFile.scala

Я могу заставить указанную выше команду работать, когда у меня есть однострочные команды, но если у меня есть какие-либо разрывы строк в скрипте (для удобства чтения), искровая оболочка (или 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)

При запуске искровой оболочки с этим скриптом я получаю следующую ошибку:

<console>:1: error: illegal start of definition

Синтаксис сценария правильный, потому что, если я запустил оболочку и вручную вставил этот код с помощью :paste, все нормально работает.

Я пробовал заканчивать все многострочные команды обратной косой чертой \ но это тоже не сработало.

Есть ли у кого-нибудь предложения о том, как я могу сохранить свой скрипт многострочным, но при этом иметь возможность передать ему искровую оболочку в качестве аргумента для начала?

2 ответа

Решение

Пытаться:

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

Ты можешь сделать :pasteзатем вставьте (Ctrl+V). После оклейки делаем Ctrl+D в оболочке.

Другие вопросы по тегам