Запуск 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 в оболочке.