Выполнить скрипт scala через Spark-Shell в автоматическом режиме

Необходимо выполнить скрипт scala через спарк-оболочку в тихом режиме. Когда я использую spark-shell -i "file.scala", после выполнения я перехожу в интерактивный режим scala. Я не хочу туда входить.

Я попытался выполнить искровую оболочку -i "file.scala". Но я не знаю, как выполнить скрипт в тихом режиме.

spark-shell -i "file.scala"

после казни я попадаю в

scala>

Не хочу переходить в режим scala>

Обновление (октябрь 2019 г.) для сценария, который завершается

Этот вопрос также касается запуска сценария, который завершается, то есть "сценария scala", который запускается spark-shell -i script.scala > output.txt, который останавливается самостоятельно (внутренняя инструкция System.exit(0) завершает сценарий).
См. этот вопрос с хорошим примером.

Ему также нужен "тихий режим", он ожидается, что он не загрязняет output.txt.

Предположим, Spark v2.2 +.


PS: во многих случаях (обычно это небольшие инструменты и тесты модулей / алгоритмов), интерпретатор Spark может быть лучше, чем компилятор ... Пожалуйста, "давайте скомпилируем!" здесь нет ответа.


person Renganathan    schedule 28.08.2019    source источник
comment
Пожалуйста, сократите количество повторов в вашем вопросе и используйте в будущем проверку орфографии.   -  person Dragonthoughts    schedule 28.08.2019
comment
создайте банку и используйте вместо нее spark-submit.   -  person undefined_variable    schedule 28.08.2019
comment
REPL не предназначен для этого. Если ваш file.scala является чистым кодом Scala, вы можете скомпилировать его с помощью scalac и запустить файл класса с помощью интерпретатора java или scala. Если это приложение Spark, вы можете использовать вместо него spark-submit.   -  person Goldie    schedule 28.08.2019


Ответы (3)


spark-shell -i file.scala в конце сохраняет интерпретатор открытым, поэтому System.exit(0) должен находиться в конце вашего скрипта. Наиболее подходящее решение - поместить код в try {} и поместить System.exit(0) в раздел finally {}.

Если требуется регистрация, вы можете использовать что-то вроде этого:

spark-shell < file.scala > test.log 2>&1 &

Если у вас есть ограничения на редактирование файла и вы не можете добавить System.exit(0), используйте:

echo :quit | scala-shell -i file.scala

UPD

Если вы хотите подавить все в выводе, кроме printlns, вам нужно отключить ведение журнала для spark-shell. Образец конфигураций находится здесь. Отключение любого вида входа в $SPARK-HOME/conf/log4j.properties должно позволить вам видеть только pritnlns. Но я бы не стал следовать этому подходу с printlns. Вместо printlns следует использовать общее ведение журнала с log4j. Вы можете настроить его так, чтобы получать те же результаты, что и с printlns. Все сводится к настройке паттерна. В этом ответе приведен пример шаблон, который решает вашу проблему.

person Artem    schedule 31.10.2019
comment
Привет. Я говорю, что используйте _1 _... И выходить не тихо, награда касается тихого выхода ... - person Peter Krauss; 31.10.2019
comment
@PeterKrauss, что ты подразумеваешь под тишиной? - person Artem; 31.10.2019
comment
Привет, бросить курить :q не молчать. Вопрос касается тихого режима (verbose = none) ... Пожалуйста, прочтите вопрос и награду за вопрос, См. Раздел ОБНОВЛЕНИЕ 2019: ожидается, что не загрязняет output.txt - person Peter Krauss; 31.10.2019
comment
@PeterKrauss, вы указываете журналы на output.txt и хотите сохранить только определенный вывод? - person Artem; 31.10.2019
comment
Да, только println(), никаких подробностей о незапрошенных выводах. - person Peter Krauss; 31.10.2019
comment
Привет, Артем, ты заслуживаешь награды за свои усилия и полезные подсказки, но я не смог протестировать ваше обновление ... Я, вероятно, проведу тесты на следующей неделе или как можно скорее, затем мы снова обсудим, и я возможно, отредактируйте здесь, чтобы включить более объективный ответ. - person Peter Krauss; 01.11.2019

Лучший способ - окончательно скомпилировать ваш код scala в jar и использовать spark-submit, но если вы просто ищете быстрый цикл итерации, вы можете просто выдать :quit после синтаксического анализа вашего кода scala:

echo :quit | scala-shell -i yourfile.scala
person rluta    schedule 28.08.2019
comment
Есть команда scala для использования в yourfile.scala, это _2 _... Но выйти или выйти не молчите. - person Peter Krauss; 24.10.2019

Добавление к ответу @rluta. Вы можете разместить вызов команды spark-shell внутри сценария оболочки. Скажите в сценарии оболочки следующее:

spark-shell < yourfile.scala

Но это потребует от вас сохранить строки кода внутри строки на случай, если оператор написан в разных строках.

OR

echo :quit | spark-shell -i yourfile.scala

Это должно

person apnith    schedule 31.10.2019
comment
Привет, бросить курить :q не молчать. Вопрос касается тихого режима (verbose = none) ... Пожалуйста, прочтите вопрос и награду за вопрос, См. Раздел ОБНОВЛЕНИЕ 2019: ожидается, что не загрязняет output.txt - person Peter Krauss; 31.10.2019