Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La definición de trabajos Spark (SJD) es un tipo de elemento Fabric que permite a los usuarios definir y ejecutar trabajos Apache Spark en Fabric. La API de definición de trabajos de Spark v2 permite a los usuarios crear y actualizar elementos de definición de trabajos de Spark con un nuevo formato llamado SparkJobDefinitionV2. La principal ventaja de usar el formato v2 es que permite a los usuarios administrar el archivo ejecutable principal y otros archivos de biblioteca con una sola llamada API, en lugar de usar la API de almacenamiento para cargar archivos por separado, no se necesita más token de almacenamiento para administrar archivos.
Prerrequisitos
- Se requiere un token de Microsoft Entra para acceder a la API REST de Fabric. Se recomienda la biblioteca MSAL (Biblioteca de autenticación de Microsoft) para obtener el token. Para obtener más información, consulte Compatibilidad con el flujo de autenticación en MSAL.
La API Fabric REST define un punto final unificado para las operaciones CRUD de los elementos Fabric. El extremo es https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items.
Descripción del trabajo Spark v2 resumen del formato
En la carga útil de gestionar un elemento de definición de trabajo de Spark, el definition campo se utiliza para especificar la configuración detallada del elemento de definición de trabajo de Spark. El definition campo contiene dos subcampos: format y parts. El format campo especifica el formato del elemento de definición de trabajo de Spark, que debe ser SparkJobDefinitionV2 para el formato v2.
El parts campo es un array que contiene la configuración detallada del elemento de definición del trabajo de Spark. Cada elemento de la parts matriz representa una parte de la configuración detallada. Cada parte contiene tres subcampos: path, payloady payloadType. El path campo especifica la ruta de acceso de la parte, el payload campo especifica el contenido de la parte codificada en base64 y el payloadType campo especifica el tipo de la carga, que debe ser InlineBase64.
Importante
Este formato v2 solo soporta definiciones de trabajos de Spark con formatos de archivo .py o .scala. No se admite el formato de archivo .jar.
Crea un elemento de definición de trabajo en Spark con el archivo principal de definición y otros archivos de liberación
En el siguiente ejemplo, crearemos un elemento de definición de trabajo en Spark que:
- El nombre es
SJDHelloWorld. - El archivo principal de definición es
main.py, que consiste en leer un archivo CSV desde su casa de lago predeterminada y guardarlo como tabla Delta de vuelta en la misma casa de lago. - Otro archivo lib es
libs.py, que tiene una función de utilidad para devolver el nombre del archivo CSV y la tabla Delta. - La casa del lago por defecto está configurada con un ID de elemento específico de la casa del lago.
A continuación se muestra la carga útil detallada para crear el elemento de definición del trabajo de Spark.
{
"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"
}
]
}
}
Para descodificar o codificar la configuración detallada, puede usar las siguientes funciones auxiliares en Python. También hay otras herramientas en línea, como https://www.base64decode.org/ que pueden realizar el mismo trabajo.
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
Una respuesta HTTP code 202 indica que el elemento de definición de trabajo de Spark se creó con éxito.
Obtén definición de trabajo en Spark con partes de definición bajo el formato v2
Con el nuevo formato v2, al obtener un elemento de definición de trabajo de Spark con partes de definición, el contenido del archivo principal de definición y otros archivos lib se incluyen en la carga útil de respuesta, codificada en base64 bajo el parts campo. Aquí tienes un ejemplo de cómo obtener un elemento de definición de trabajo en Spark con partes de definición:
- En primer lugar, realice una solicitud POST al punto de conexión
https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items/{sjditemid}/getDefinitionParts?format=SparkJobDefinitionV2. Asegúrese de que el valor del parámetro de consulta de formato esSparkJobDefinitionV2. - A continuación, en los encabezados de respuesta, compruebe el código de estado HTTP. Un código HTTP 202 indica que la solicitud se aceptó correctamente. Copie el
x-ms-operation-idvalor de los encabezados de respuesta. - Por último, realice una solicitud GET al punto de conexión
https://api.fabric.microsoft.com/v1/operations/{operationId}con el valor copiadox-ms-operation-idpara obtener el resultado de la operación. En la carga útil de respuesta, eldefinitioncampo contiene la configuración detallada del elemento de definición de trabajo de Spark, incluyendo el archivo principal de definición y otros archivos de lib bajo elpartscampo.
Actualiza el elemento de definición de trabajo de Spark con el archivo principal de definición y otros archivos de lib bajo el formato v2
Para actualizar un elemento de definición de trabajo de Spark existente con el archivo principal de definición y otros archivos de lib bajo el formato v2, puedes usar una estructura de carga útil similar a la operación de creación. Aquí tienes un ejemplo de actualización del elemento de definición de trabajo de Spark creado en la sección anterior:
{
"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"
}
]
}
}
Con la carga anterior, se realizan los siguientes cambios en los archivos:
- El archivo main.py se actualiza con nuevo contenido.
- El lib1.py se elimina de este elemento de definición de trabajo en Spark y también se elimina del almacenamiento de OneLake.
- Se añade un nuevo archivo de lib2.py a este elemento de definición de trabajo de Spark y se sube al almacenamiento de OneLake.
Para actualizar el elemento de definición de trabajo de Spark, realiza una solicitud POST al endpoint https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items/{sjditemid} con la carga útil mencionada anteriormente. Una respuesta con código HTTP 202 indica que el elemento de definición de trabajo de Spark se actualizó con éxito.