Как передать 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.

Другие вопросы по тегам