Единственные известные мне два способа запустить искровый код на основе Scala - это либо скомпилировать программу Scala в файл jar и запустить его с помощью spark-submit, либо запустить скрипт Scala с помощью: load внутри искровой оболочки. Мой вопрос в том, что можно запустить файл Scala непосредственно в командной строке, не заходя сначала в искровую оболочку, а затем выпуская: load?
Можно ли запустить сценарий Spark Scala, не заходя в искровую оболочку?
Ответы (2)
Вы можете просто использовать перенаправление stdin с spark-shell
:
spark-shell < YourSparkCode.scala
Эта команда запускает искровую оболочку, интерпретирует вашу YourSparkCode.scala
строку за строкой и завершает работу в конце.
Другой вариант - использовать параметр -I <file>
команды spark-shell
:
spark-shell -I YourSparkCode.scala
Единственное отличие состоит в том, что последняя команда оставляет вас внутри оболочки, и вы должны выполнить команду :quit
, чтобы закрыть сеанс.
[UDP] Передача параметров
Поскольку spark-shell
не выполняет ваш источник как приложение, а просто интерпретирует ваш исходный файл построчно, вы не можете передавать какие-либо параметры напрямую в качестве аргументов приложения.
К счастью, может быть много вариантов для достижения того же (например, экстернализация параметров в другом файле и чтение его в самом начале вашего скрипта).
Но лично я считаю конфигурацию Spark наиболее понятной и удобной.
Вы передаете свои параметры через опцию --conf
:
spark-shell --conf spark.myscript.arg1=val1 --conf spark.yourspace.arg2=val2 < YourSparkCode.scala
(обратите внимание, что префикс spark.
в имени вашего свойства является обязательным, иначе Spark отклонит ваше свойство как недействительное)
И прочтите эти аргументы в своем коде Spark, как показано ниже:
val arg1: String = spark.conf.get("spark.myscript.arg1")
val arg2: String = spark.conf.get("spark.myscript.arg2")
Это возможно через spark-submit.
https://spark.apache.org/docs/latest/submitting-applications.html
Вы даже можете поместить его в сценарий bash либо создать sbt-task https://www.scala-sbt.org/1.x/docs/Tasks.html, чтобы запустить свой код.