Можно ли запустить сценарий Spark Scala, не заходя в искровую оболочку?

Единственные известные мне два способа запустить искровый код на основе Scala - это либо скомпилировать программу Scala в файл jar и запустить его с помощью spark-submit, либо запустить скрипт Scala с помощью: load внутри искровой оболочки. Мой вопрос в том, что можно запустить файл Scala непосредственно в командной строке, не заходя сначала в искровую оболочку, а затем выпуская: load?


person MetallicPriest    schedule 21.02.2020    source источник


Ответы (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")
person egordoe    schedule 21.02.2020
comment
Но есть ли способ передать такие аргументы командной строки? - person MetallicPriest; 22.02.2020
comment
@MetallicPriest хороший вопрос. Я не знаю по-настоящему элегантного способа параметризации вашего кода. Я вижу здесь как минимум 2 варианта. Первый - иметь заполнители в исходном файле и заменять их перед отправкой содержимого в искровую оболочку. Второй - передать ваши параметры как свойства конфигурации искры. Я обновлю свой ответ. - person egordoe; 22.02.2020

Это возможно через spark-submit.

https://spark.apache.org/docs/latest/submitting-applications.html

Вы даже можете поместить его в сценарий bash либо создать sbt-task https://www.scala-sbt.org/1.x/docs/Tasks.html, чтобы запустить свой код.

person Iva Kam    schedule 21.02.2020
comment
Где сказано, что вы можете запустить файл Scala с помощью spark-submit? Насколько я знаю, вы можете отправить только скомпилированный файл jar с помощью spark-submit. - person MetallicPriest; 21.02.2020