Kuinka luoda ja päivittää Spark-työmääritelmä V2-muodossa Microsoft Fabric REST API:n avulla

Spark-tehtävien määrittely (SJD) on eräänlainen Fabric-esine, jonka avulla käyttäjät voivat määritellä ja ajaa Apache Spark -tehtäviä Fabric-järjestelmässä. Spark-työmäärittelyrajapinta v2 antaa käyttäjille mahdollisuuden luoda ja päivittää Spark-työmäärittelykohteita uudella muodolla nimeltä SparkJobDefinitionV2. V2-muodon ensisijainen etu on, että se mahdollistaa pääsuoritettavan tiedoston ja muiden kirjastotiedostojen hallinnan yhdellä API-kutsulla; tiedostojen erilliseen lataamiseen ei tarvita enää tallennustunnusta tiedostojen hallintaan.

Edellytykset

  • Microsoft Entra -token vaaditaan Fabric REST API:n käyttämiseen. MSAL (Microsoft Authentication Library) -kirjastoa suositellaan tokenin saamiseksi. Lisätietoja löytyy osoitteesta Authentication flow -tuki MSAL:ssa.

Fabric REST API määrittelee yhtenäisen päätepisteen Fabric-kohteiden CRUD-toiminnoille. Päätepiste on https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items.

Spark-työn määrittely v2-formaatin yleiskatsaus

Spark-työn määrittelykohteen hallintakuormassa kenttää definition käytetään määrittämään Spark-työn määrittelykohteen yksityiskohtainen asetus. Kenttä definition sisältää kaksi alikenttää: format ja parts. Kenttä format määrittää Spark-työn määrittelykohteen muodon, joka tulisi SparkJobDefinitionV2 olla v2-formaatille.

Kenttä parts on taulukko, joka sisältää Spark-työn määrittelykohteen yksityiskohtaisen asetelman. Jokainen taulukko parts edustaa osaa yksityiskohtaisesta kokoonpanosta. Jokaisessa osassa on kolme alakenttää: path, payload, ja payloadType. Kenttä path määrittää osan polun, kenttä payload määrittää osan sisällön, joka on koodattu base64:ään, ja kenttä payloadType määrittää hyötykuorman tyypin, joka tulisi olla InlineBase64.

Tärkeää

Tämä v2-muoto tukee vain Spark-työmäärittelyjä tiedostomuodoilla .py tai .scala. .jar tiedostomuotoa ei tueta.

Luo Spark-työn määrittelykohde päämäärittelutiedostolla ja muilla lib-tiedostoilla

Seuraavassa esimerkissä luomme Spark-työn määrittelykohteen, joka:

  1. Nimi on SJDHelloWorld.
  2. Päämäärittelytiedosto on main.py, joka lukee CSV-tiedoston oletusjärvitalosta ja tallentaa sen Delta-tauluksi takaisin samaan järvenrakennukseen.
  3. Toinen lib-tiedosto on libs.py, jossa on aputoiminto, jolla palautetaan CSV-tiedoston nimi ja Delta-taulukko.
  4. Oletusjärvitalo on asetettu tietylle järvitalo-esine-ID:lle.

Seuraavassa on yksityiskohtainen hyötykuorma Spark-työn määrittelykohteen luomiseksi.

{
  "displayName": "SJDHelloWorld",
  "type": "SparkJobDefinition",
  "definition": {
    "format": "SparkJobDefinitionV2",
    "parts": [
      {
        "path": "SparkJobDefinitionV1.json",
        "payload": "<REDACTED>",
        "payloadType": "InlineBase64"
      },
      {
        "path": "Main/main.py",
        "payload": "<REDACTED>",
        "payloadType": "InlineBase64"
      },
      {
        "path": "Libs/lib1.py",
        "payload": "<REDACTED>",
        "payloadType": "InlineBase64"
      }
    ]
  }
}

Yksityiskohtaisen kokoonpanon purkamiseen tai koodaamiseen voit käyttää seuraavia aputoimintoja Pythonissa. On myös muita verkkotyökaluja https://www.base64decode.org/ , jotka voivat hoitaa saman tehtävän.

import base64

def json_to_base64(json_data):
    # Serialize the JSON data to a string
    json_string = json.dumps(json_data)
    
    # Encode the JSON string as bytes
    json_bytes = json_string.encode('utf-8')
    
    # Encode the bytes as Base64
    base64_encoded = base64.b64encode(json_bytes).decode('utf-8')
    
    return base64_encoded

def base64_to_json(base64_data):
    # Decode the Base64-encoded string to bytes
    base64_bytes = base64_data.encode('utf-8')
    
    # Decode the bytes to a JSON string
    json_string = base64.b64decode(base64_bytes).decode('utf-8')
    
    # Deserialize the JSON string to a Python dictionary
    json_data = json.loads(json_string)
    
    return json_data

HTTP-koodin 202 vastaus kertoo, että Spark-työn määrittely on onnistuneesti luotu.

Hanki Spark-työn määrittely määrittelyosin kanssa v2-muodossa

Uudessa v2-formaatissa, kun saat Spark-työn määrittelykohteen, jossa on määrittelyosia, päämäärittelytiedoston ja muiden lib-tiedostojen tiedostosisältö sisältyy vastauskuormaan, base64 on koodattu kentän parts alle. Tässä on esimerkki Spark-työn määrittelykohteen saamisesta määritelmien osilla:

  1. Ensiksi tee POST-pyyntö päätepisteelle https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items/{sjditemid}/getDefinitionParts?format=SparkJobDefinitionV2. Varmista, että muotokyselyparametrin arvo on SparkJobDefinitionV2.
  2. Sitten vastausotsikoista tarkista HTTP-tilakoodi. HTTP-koodi 202 osoittaa, että pyyntö hyväksyttiin onnistuneesti. Kopioi arvo x-ms-operation-id vastauksen otsikoista.
  3. Lopuksi tee GET-pyyntö päätepisteelle https://api.fabric.microsoft.com/v1/operations/{operationId} kopioidulla x-ms-operation-id arvolla saadaksesi operaation tuloksen. Vastauskuormassa definition kenttä sisältää yksityiskohtaisen Spark-työn määrittelykohteen asetuksen, mukaan lukien päämäärittelytiedoston ja muut kentän parts alla olevat lib-tiedostot.

Päivitä Spark-työn määrittelykohde päämäärittelytiedostolla ja muilla lib-tiedostoilla v2-muodossa

Jos haluat päivittää olemassa olevan Spark-työn määrittelykohteen päämäärittelytiedostolla ja muilla lib-tiedostoilla v2-muodossa, voit käyttää vastaavaa hyötykuormarakennetta kuin create-operaatiossa. Tässä on esimerkki edellisessä osiossa luodun Spark-tehtävämäärittelyn päivittämisestä:

{
  "displayName": "SJDHelloWorld",
  "type": "SparkJobDefinition",
  "definition": {
    "format": "SparkJobDefinitionV2",
    "parts": [
      {
        "path": "SparkJobDefinitionV1.json",
        "payload": "<REDACTED>",
        "payloadType": "InlineBase64"
      },
      {
        "path": "Main/main.py",
        "payload": "<REDACTED>",
        "payloadType": "InlineBase64"
      },
      {
        "path": "Libs/lib2.py",
        "payload": "<REDACTED>",
        "payloadType": "InlineBase64"
      }
    ]
  }
}

Yllä mainitulla kuormalla tiedostoihin tehdään seuraavat muutokset:

  1. main.py-tiedosto päivitetään uudella sisällöllä.
  2. lib1.py poistetaan tästä Spark-tehtävämäärittelykohteesta ja poistetaan myös OneLake-tallennuksesta.
  3. Uusi lib2.py-tiedosto lisätään tähän Spark-työn määrittelykohteeseen ja ladataan OneLake-tallennustilaan.

Päivittääksesi Spark-työn määrittelykohteen, tee POST-pyyntö päätepisteelle https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items/{sjditemid} , jossa on yllä oleva hyötykuorma. HTTP-koodin 202 vastaus kertoo, että Spark-tehtävämäärittely on päivitetty onnistuneesti.