Kommentar
Å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-jobbdefinition (SJD) är en typ av Fabric-objekt som gör det möjligt för användare att definiera och köra Apache Spark-jobb i Fabric. Spark-jobbdefinitions-API:n v2 tillåter användare att skapa och uppdatera Spark-jobbdefinitionsobjekt med ett nytt format kallat 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 (Microsofts autentiseringsbibliotek) rekommenderas för att hämta token. Mer information finns i Stöd för autentiseringsflöde i MSAL.
Fabric REST API definierar en enhetlig slutpunkt för CRUD-operationer av Fabric-objekt. Slutpunkten är https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items.
Översikt av Spark-jobbdefinition v2 formatöversikt
I nyttolasten för att hantera en Spark-jobbdefinitionspunkt definition används fältet för att specificera den detaljerade uppsättningen av Spark-jobbdefinitionsobjektet. Fältet definition innehåller två underfält: format och parts. Fältet format specificerar formatet för Spark-jobbdefinitionsobjektet, vilket ska gälla SparkJobDefinitionV2 för v2-formatet.
Fältet parts är en array som innehåller den detaljerade uppsättningen 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!
Detta v2-format stöder endast Spark-jobbdefinitioner med filformat .py eller .scala. Det .jar filformatet stöds inte.
Skapa ett Spark-jobbdefinitionsobjekt med huvuddefinitionsfilen och andra biblioteksfiler
I följande exempel skapar vi en Spark-jobbdefinitionspunkt som:
- Namnet är
SJDHelloWorld. - Huvuddefinitionsfilen är
main.py, vilket innebär att läsa en CSV-fil från dess standard sjöhus och spara som en Delta-tabell tillbaka till samma sjöhus. - Annan lib-fil är
libs.py, som har en verktygsfunktion för att returnera namnet på CSV-filen och Delta-tabellen. - Standard-lakehouse är inställt på ett specifikt lakehouse-item-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 indikerar att Spark-jobbdefinitionsobjektet skapades framgångsrikt.
Få Spark-jobbdefinition med definitionsdelar under v2-formatet
Med det nya v2-formatet, när man hämtar ett Spark-jobbdefinitionsobjekt med definitionsdelar, inkluderas filinnehållet i huvuddefinitionsfilen och andra biblioteksfiler i svarspayloaden, base64 kodad under parts fältet. Här är ett exempel på att få en Spark-jobbdefinitionspunkt med definitionsdelar:
- Gör först en POST-begäran till slutpunkten
https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items/{sjditemid}/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 responspayloadendefinitioninnehåller fältet den detaljerade uppsättningen av Spark-jobbdefinitionsobjektet, inklusive huvuddefinitionsfilen och andra biblioteksfiler underpartsfältet.
Uppdatera Spark-jobbdefinitionsobjektet med huvuddefinitionsfilen och andra biblioteksfiler under v2-format
För att uppdatera ett befintligt Spark-jobbdefinitionsobjekt med huvuddefinitionsfilen och andra bibliotekfiler under v2-formatet kan du använda en liknande payload-struktur som skapa-operationen. Här är ett exempel på att uppdatera Spark-jobbdefinitionsobjektet 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 detta Spark-jobbdefinitionsobjekt och tas även bort från OneLake-lagringen.
- En ny lib2.py-fil läggs till i detta Spark-jobbdefinitionsobjekt och laddas upp till OneLake-lagringen.
För att uppdatera Spark-jobbdefinitionsobjektet, gör en POST-förfrågan till slutpunkten https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items/{sjditemid} med ovanstående nyttolast. Ett HTTP-kod 202-svar indikerar att Spark-jobbdefinitionsobjektet uppdaterades framgångsrikt.