Как указать аргументы командной строки, используя argparse
для скрипта PySpark? Я ломал голову над этим и клянусь, что не могу найти решение где-либо еще.
Вот мой тестовый скрипт:
import argparse
from pyspark.sql import SparkSession
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--v1", "-a", type=int, default=2)
parser.add_argument("--v2", "-b", type=int, default=3)
args = vars(parser.parse_args())
spark = (SparkSession.builder
.appName("Test")
.master("local[*]")
.getOrCreate()
)
result = args['v1'] + args['v2']
return result
if __name__ == "__main__":
result = main()
print(result)
Когда я пытаюсь запустить файл с помощью spark-submit file.py --v1 5 --v2 4
, я получаю сообщение об ошибке, как показано ниже:
[TerminalIPythonApp] CRITICAL | Bad config encountered during initialization:
[TerminalIPythonApp] CRITICAL | Unrecognized flag: '--v1'
Однако, когда я не указываю аргументы (просто spark-submit file.py
), он делает сумму правильно, используя значения по умолчанию 2 и 3 из анализатора аргументов и отображает «5», как и ожидалось. Ясно, что он правильно читает значения из argparse. Что не так с командой, когда я фактически передаю значения не по умолчанию?
ПРИМЕЧАНИЕ. Использую PySpark 2.4.4 и Python 3.6.
РЕДАКТИРОВАТЬ: Конечно, я мог бы просто использовать sys.argv и покончим с этим, но argparse намного лучше!