Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Spark Job Definition (SJD) är en typ av Fabric-objekt som gör att användare kan definiera och köra Apache Spark-jobb i Microsoft Fabric. Med API:et för Spark-jobbdefinition v2 kan användare skapa och uppdatera Spark-jobbdefinitionsobjekt med ett nytt format med namnet SparkJobDefinitionV2. Den främsta fördelen med att använda v2-formatet är att användarna kan hantera den körbara huvudfilen och andra biblioteksfiler med ett enda API-anrop, i stället för att använda lagrings-API för att ladda upp filer separat behövs ingen mer lagringstoken för att hantera filer.
Förutsättningar
- En token från Microsoft Entra krävs för att få åtkomst till Fabric REST API. MSAL-biblioteket (Microsoft Authentication Library) rekommenderas för att hämta token. Mer information finns i Stöd för autentiseringsflöde i MSAL.
REST-API:et för Microsoft Fabric definierar en enhetlig slutpunkt för CRUD-åtgärder av Fabric-objekt. Slutpunkten är https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items.
Översikt över Spark Job Definition v2-format
I nyttolasten för hantering av en Spark-jobbdefinition används fältet definition för att specificera inställningarna i detalj för Spark-jobbdefinitionen. Fältet definition innehåller två underfält: format och parts. Fältet format anger formatet för Spark-jobbdefinitionsobjektet, som ska vara SparkJobDefinitionV2 för v2-formatet.
Fältet parts är en matris som innehåller den detaljerade konfigurationen av Spark-jobbdefinitionsobjektet. Varje objekt i matrisen parts representerar en del av den detaljerade installationen. Varje del innehåller tre underfält: path, payloadoch payloadType. Fältet path anger sökvägen till delen, payload fältet anger innehållet i den del som är base64-kodad och payloadType fältet anger typen av nyttolast, som ska vara InlineBase64.
Viktigt!
Det här v2-formatet stöder endast Spark-jobbdefinitioner med filformat för .py eller .scala. Det .jar filformatet stöds inte.
Skapa ett Spark-jobbdefinitionsobjekt med huvuddefinitionsfilen och andra lib-filer
I följande exempel skapar vi ett Spark-jobbdefinitionsobjekt som:
- Namnet är
SJDHelloWorld. - Huvuddefinitionsfilen är
main.py, vilken ska läsa en CSV-fil från sitt standard Lakehouse och sedan spara den som en Delta-tabell tillbaka i samma Lakehouse. - Annan lib-fil är
libs.py, som har en verktygsfunktion för att returnera namnet på CSV-filen och Delta-tabellen. - Standardvärdet för Lakehouse är inställt på ett specifikt Lakehouse-artefakt-ID.
Följande är den detaljerade nyttolasten för att skapa Spark-jobbdefinitionsobjektet.
{
"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"
}
]
}
}
Om du vill avkoda eller koda den detaljerade installationen kan du använda följande hjälpfunktioner i Python. Det finns också andra onlineverktyg som https://www.base64decode.org/ kan utföra samma jobb.
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
Ett HTTP-kod 202-svar anger att Spark-jobbdefinitionsobjektet har skapats.
Hämta Spark-jobbdefinition med definitionsdelar i v2-format
Med det nya v2-formatet, när du hämtar ett Spark-jobbdefinitionsobjekt med definitionsdelar, inkluderas filinnehållet i huvuddefinitionsfilen och andra lib-filer i svarsnyttolasten, base64 som kodas under parts fältet. Här är ett exempel på hur du hämtar ett Spark-jobbdefinitionsobjekt med definitionsdelar:
- Gör först en POST-begäran till slutpunkten
https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items/{sjdartifactid}/getDefinitionParts?format=SparkJobDefinitionV2. Kontrollera att värdet för frågeparametern format ärSparkJobDefinitionV2. - Kontrollera sedan HTTP-statuskoden i svarshuvudena. En HTTP-kod 202 anger att begäran har godkänts.
x-ms-operation-idKopiera värdet från svarshuvudena. - Slutligen gör du en GET-begäran till slutpunkten
https://api.fabric.microsoft.com/v1/operations/{operationId}med det kopieradex-ms-operation-idvärdet för att hämta åtgärdsresultatet. I svarsnyttolasten innehållerdefinition-fältet den detaljerade konfigurationen av objektet spark-jobbdefinition, inklusive huvuddefinitionsfilen och andra lib-filer under fältetparts.
Uppdatera Spark-jobbdefinitionsobjektet med huvuddefinitionsfilen och andra lib-filer i v2-format
Om du vill uppdatera ett befintligt Spark-jobbdefinitionsobjekt med huvuddefinitionsfilen och andra lib-filer i v2-formatet kan du använda en liknande nyttolaststruktur som skapandeåtgärden. Här är ett exempel på hur du uppdaterar det Spark-jobbdefinitionsobjekt som skapades i föregående avsnitt:
{
"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"
}
]
}
}
Med nyttolasten ovan görs följande ändringar i filerna:
- Filen main.py uppdateras med nytt innehåll.
- Lib1.py tas bort från det här Spark-jobbdefinitionsobjektet och tas även bort från OneLake-lagringen.
- En ny lib2.py fil läggs till i det här Spark-jobbdefinitionsobjektet och laddas upp till OneLake-lagringen.
Om du vill uppdatera Spark-jobbdefinitionsobjektet gör du en POST-begäran till slutpunkten https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items/{sjdartifactid} med nyttolasten ovan. Ett HTTP-kod 202-svar anger att Spark-jobbdefinitionsobjektet har uppdaterats.