Определение задания Spark

В этой статье представлена разбивка структуры для элементов определения задания Spark. Подробные сведения см. в статье о создании и обновлении определения задания Spark с помощью REST API Microsoft Fabric.

Поддерживаемые форматы

Элементы SparkJobDefinition поддерживают SparkJobDefinitionV1 и SparkJobDefinitionV2 формат.

Различия в формате

  • SparkJobDefinitionV1 определяет только свойства определения задания Spark в полезных данных.
  • SparkJobDefinitionV2 использует то же содержимое полезных данных, что и версия 1, и расширяет его, позволяя отправлять основные исполняемые и зависимые библиотеки в виде дополнительных частей.

Свойства в полезных данных определения задания Spark согласованы в обоих форматах. Различие между форматами заключается в методе, с помощью которого предоставляются файлы, а не в самом содержимом полезных данных.

SparkJobDefinitionV1

Части определения

Определение элемента задания Spark с SparkJobDefinitionV1 форматом состоит из одной части и создается следующим образом:

Пример содержимого полезных данных, декодированного из Base64

{
    "executableFile": null,
    "defaultLakehouseArtifactId": "",
    "mainClass": "",
    "additionalLakehouseIds": [],
    "retryPolicy": null,
    "commandLineArguments": "",
    "additionalLibraryUris": [],
    "language": "",
    "environmentArtifactId": null
}

Пример определения

Ниже приведен пример определения элемента для задания Spark.

{
    "format": "SparkJobDefinitionV1",
    "parts": [
        {
            "path": "SparkJobDefinitionV1.json",
            "payload": "eyJleGVjdXRhYmxlRmlsZSI6bnVsbCwiZGVmYXVsdExha2Vob3VzZUFydGlmYWN0SWQiOiIiLCJtYWluQ2xhc3MiOiIiLCJhZGRpdGlvbmFsTGFrZWhvdXNlSWRzIjpbXSwicmV0cnlPbGljYXR5IjpudWxsLCJjb21tYW5kTGluZUFyZ3VtZW50c2I6bnVsbCwiY29tbWFuZExpbmVBYnJndW1lbnRzIjpbXSwibGFuZ3VhZ2UiOiIiLCJlbm52ZW1lbnRBYnJndW1lbnRzIjpbXSwibGFuZ3VhZ2UiOiIiLCJlbm52ZW1lbnRBYnJndW1lbnRzIjpbXSwiZW52aXJvbm1lbnRBcnRpZmFjdElkIjpudWxsfQ==",
            "payloadType": "InlineBase64"
        },
        {
            "path": ".platform",
            "payload": "ZG90UGxhdGZvcm1CYXNlNjRTdHJpbmc=",
            "payloadType": "InlineBase64"
        }
    ]
}

схема SparkJobDefinitionV1.json

В следующей таблице описаны свойства, поддерживаемые в SparkJobDefinitionV1.json.

Недвижимость Тип Обязательно Description
executableFile string | Null нет Путь к основному исполняемому файлу (например, main.py)
language струна нет Язык задания Spark (например, Python, Scala).
mainClass струна нет Полное имя основного класса для заданий на основе JVM.
commandLineArguments струна нет Аргументы командной строки, переданные заданию.
defaultLakehouseArtifactId струна нет Идентификатор элемента Lakehouse по умолчанию, связанный с заданием.
additionalLakehouseIds массив строк нет Дополнительные идентификаторы элементов Lakehouse, необходимые для задания.
additionalLibraryUris массив строк нет Список имен файлов библиотеки.
retryPolicy object | Null нет Настройка политики повтора для задания Spark.
environmentArtifactId string | Null нет Идентификатор элемента среды, используемый для выполнения.

retryPolicy

Свойство retryPolicy управляет поведением повторных попыток для задания Spark.

  • Тип: строка (объект в кодировке JSON)
  • Обязательно: Нет

Значение должно быть строкой в кодировке JSON, представляющей политику повторных попыток.

Объект политики повтора

Недвижимость Тип Обязательно Description
policyType струна Да Тип политики повтора. Единственным поддерживаемым значением является SimpleRetry.
policyProperties объект нет Свойства, которые настраивают поведение повторных попыток.

Свойства политики повтора (policyProperties)

Недвижимость Тип Обязательно Description
retryCount целое число Да Количество повторных попыток. Должен быть ≥1 или -1.
intervalBetweenRetriesInSeconds целое число нет Интервал между повторными попытками в секундах (0–86400).

Пример

{
  "retryPolicy": {
    "policyType": "SimpleRetry",
    "policyProperties": {
      "retryCount": 3,
      "intervalBetweenRetriesInSeconds": 300
    }
  }
}

SparkJobDefinitionV2

Примечание Формат SparkJobDefinitionV2 поддерживает только отправку файлов Python (.py) и R (.R). .jar Отправка файлов не поддерживается ни в том, Libs ни Main в нескольких частях.

Части определения

Определение элемента задания Spark с SparkJobDefinitionV2 форматом SparkJobDefinitionV1.json состоит из части и, при необходимости, Main части файла и Libs частей файла.

Примечание. По историческим причинам имя файла содержится V1 , даже если SparkJobDefinitionV2 используется формат. Часть SparkJobDefinitionV1.json создается следующим образом:

Пример содержимого полезных данных, декодированного из Base64

{
    "executableFile": "main.py",
    "defaultLakehouseArtifactId": "",
    "mainClass": "",
    "additionalLakehouseIds": [],
    "retryPolicy": null,
    "commandLineArguments": "",
    "additionalLibraryUris": ["lib1.py", "lib2.py"],
    "language": "Python",
    "environmentArtifactId": null
}

Часть файла является необязательной Main . Может быть не более однойMain части файла. Он должен быть предоставлен, если клиент хочет отправить основной файл определения в запросе на создание и обновление. Часть Main файла создается следующим образом:

  • Путь — путь к файлу, который должен начинаться с Main/имени файла. Например: Main/main.py.

  • Тип полезных данных — InlineBase64

  • Полезные данные — содержимое файла, закодированное в формате Base64.

Необязательная Libs часть файла. Может быть несколькоLibs частей файлов. Он должен быть предоставлен, если клиент хочет отправить ссылочный файл в запросе на создание и обновление. Часть Libs файла создается следующим образом:

  • Путь — путь к файлу, который должен начинаться с Libs/имени файла. Например: Libs/lib1.py.

  • Тип полезных данных — InlineBase64

  • Полезные данные — содержимое файла, закодированное в формате Base64.

Пример определения

Ниже приведен пример определения задания SparkJobDefinitionV2 с основным файлом определения и двумя ссылочными файлами.

{
    "format": "SparkJobDefinitionV2",
    "parts": [
        {
            "path": "SparkJobDefinitionV1.json",
            "payload": "ewogICAgImV4ZWN1dGFibGVGaWxlIjogIm1haW4ucHkiLAogICAgImRlZmF1bHRMYWtlaG91c2VBcnRpZmFjdElkIjogIiIsCiAgICAibWFpbkNsYXNzIjogIiIsCiAgICAiYWRkaXRpb25hbExha2Vob3VzZUlkcyI6IFtdLAogICAgInJldHJ5UG9saWN5IjogbnVsbCwKICAgICJjb21tYW5kTGluZUFyZ3VtZW50cyI6ICIiLAogICAgImFkZGl0aW9uYWxMaWJyYXJ5VXJpcyI6IFsibGliMS5weSIsICJsaWIyLnB5Il0sCiAgICAibGFuZ3VhZ2UiOiAiUHl0aG9uIiwKICAgICJlbnZpcm9ubWVudEFydGlmYWN0SWQiOiBudWxsCn0=",
            "payloadType": "InlineBase64"
        },
        {
            "path": ".platform",
            "payload": "ZG90UGxhdGZvcm1CYXNlNjRTdHJpbmc=",
            "payloadType": "InlineBase64"
        },
        {
            "path": "Main/main.py",
            "payload": "cHJpbnQoMSk=",
            "payloadType": "InlineBase64"
        },
        {
            "path": "Libs/lib1.py",
            "payload": "cHJpbnQoMik=",
            "payloadType": "InlineBase64"
        }
        {
            "path": "Libs/lib2.py",
            "payload": "cHJpbnQoMyk=",
            "payloadType": "InlineBase64"
        }
    ]
}