Как передать EMR Serverless PySpark entryPointArguments в качестве переменной
У меня есть задание EMR Serverless PySpark, которое я запускаю из пошаговой функции. Я пытаюсь передать SparkSubmit аргументы из entryPointArguments в виде переменных, установленных в начале пошаговой функции, т.е. today_date, source, tuningd_parameters, которые я затем использую в коде PySpark.
Я смог найти частичное решение в этом посте здесь , однако я пытаюсь передать переменные из функции шага, а не из жестко закодированного аргумента, т.е. "прд".
"JobDriver": {
"SparkSubmit": {
"EntryPoint": "s3://xxxx-my-code/test/my_code_edited_3.py",
"EntryPointArguments": ["-env", "prd", "-source.$", "$.source"]
}
}
Используя argparse, я могу прочитать первый аргумент «-env», и он успешно возвращает «prd», однако у меня возникают проблемы с выяснением того, как передать переменную для исходного аргумента.
1 ответ
Удалось найти ответ на этот вопрос. Передача переменных аргументов в EMR Serverless SparkSubmit осуществляется с помощью встроенных функций AmazonStateLanguage .
При условии, что ввод JSON для StepFunction:
{
"source": "mysource123",
}
Правильный способ передать этот переменный аргумент в EntryPointArgument:
"EntryPointArguments.$": "States.Array('-source', $.source)"
Затем с помощью argparse можно прочитать эту переменную в задании PySpark в EMR Serverless.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-source")
args = parser.parse_args()
print(args.source)
Результатом оператора печати является mysource123.