วิธีสร้างและอัปเดตการกําหนดงาน Spark ด้วยรูปแบบ V2 ผ่าน Microsoft Fabric REST API

Spark job definition (SJD) เป็นประเภทของไอเท็ม Fabric ที่ช่วยให้ผู้ใช้สามารถกําหนดและรันงาน Apache Spark ใน Fabric ได้ Spark job definition API v2 อนุญาตให้ผู้ใช้สร้างและอัปเดตรายการกําหนดงาน Spark ด้วยรูปแบบใหม่ที่เรียกว่า SparkJobDefinitionV2. ประโยชน์หลักของการใช้รูปแบบ v2 คือช่วยให้ผู้ใช้สามารถจัดการไฟล์ปฏิบัติการหลักและไฟล์ไลบรารีอื่น ๆ ได้ด้วยการเรียก API เพียงครั้งเดียวแทนที่จะใช้ API ที่เก็บข้อมูลเพื่ออัปโหลดไฟล์แยกต่างหากไม่จําเป็นต้องใช้โทเค็นที่เก็บข้อมูลอีกต่อไปสําหรับการจัดการไฟล์

ข้อกําหนดเบื้องต้น

Fabric REST API กําหนดจุดสิ้นสุดที่เป็นหนึ่งเดียวสําหรับการดําเนินงาน CRUD ของรายการ Fabric ปลายทางคือhttps://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items

ภาพรวมรูปแบบการกําหนดงาน Spark v2

ในภาระงานของการจัดการรายการกําหนดงาน Spark ฟิลด์นี้ definition ถูกใช้เพื่อระบุการตั้งค่ารายละเอียดของรายการกําหนดงาน Spark ฟิลด์ประกอบด้วยdefinitionฟิลด์ย่อยสองฟิลด์: format และparts ฟิลด์นี้ format ระบุรูปแบบของรายการนิยามงาน Spark ซึ่งควรเป็น SparkJobDefinitionV2 สําหรับรูปแบบ v2

ฟิลด์นี้เป็น parts อาร์เรย์ที่มีการตั้งค่ารายละเอียดของรายการกําหนดงาน Spark แต่ละรายการใน parts อาร์เรย์แสดงถึงส่วนหนึ่งของการตั้งค่าโดยละเอียด แต่ละส่วนประกอบด้วยเขตข้อมูลย่อยสามช่อง: path, , payloadและpayloadType pathฟิลด์ระบุเส้นทางของชิ้นส่วนpayloadฟิลด์ระบุเนื้อหาของชิ้นส่วนที่เข้ารหัส base64 และpayloadTypeฟิลด์ระบุชนิดของเพย์โหลดซึ่งควรเป็นInlineBase64

สําคัญ

รูปแบบ v2 นี้รองรับการกําหนดงาน Spark เฉพาะกับไฟล์รูปแบบ .py หรือ .scala เท่านั้น ไม่รองรับรูปแบบไฟล์ .jar

สร้างรายการนิยามงาน Spark ด้วยไฟล์นิยามหลักและไฟล์ลิบอื่น ๆ

ในตัวอย่างต่อไปนี้ เราจะสร้างรายการนิยามงาน Spark ซึ่ง:

  1. ชื่อคือ SJDHelloWorld.
  2. ไฟล์คํานิยามหลักคือ main.py, ซึ่งใช้อ่านไฟล์ CSV จากบ้านพักทะเลสาบเริ่มต้นและบันทึกเป็นตารางเดลต้ากลับไปยังบ้านพักน้ําเดียวกัน
  3. ไฟล์ LIB อื่น ๆ คือ libs.pyซึ่งมีฟังก์ชันยูทิลิตี้เพื่อส่งคืนชื่อของไฟล์ CSV และตารางเดลต้า
  4. บ้านพักทะเลสาบเริ่มต้นถูกตั้งค่าเป็นรหัสไอเท็มบ้านพักทะเลสาบเฉพาะ

ต่อไปนี้คือรายละเอียดของเพย์โหลดสําหรับการสร้างรายการกําหนดงาน 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"
      }
    ]
  }
}

ในการถอดรหัสหรือเข้ารหัสการตั้งค่าโดยละเอียด คุณสามารถใช้ฟังก์ชันตัวช่วยต่อไปนี้ใน Python นอกจากนี้ยังมีเครื่องมือออนไลน์อื่น ๆ เช่น https://www.base64decode.org/ ที่สามารถทํางานเดียวกันได้

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 202 แสดงว่ารายการกําหนดงาน Spark ถูกสร้างสําเร็จแล้ว

รับการกําหนดงาน Spark พร้อมชิ้นส่วนกําหนดภายใต้รูปแบบ v2

ด้วยรูปแบบ v2 ใหม่ เมื่อได้รับรายการกําหนดงาน Spark ที่มีส่วนกําหนด เนื้อหาไฟล์ของไฟล์กําหนดหลักและไฟล์ลิบอื่น ๆ จะถูกรวมอยู่ใน payload ตอบกลับ base64 ที่เข้ารหัสไว้ใต้ parts ฟิลด์ นี่คือตัวอย่างการได้ไอเท็มนิยามงาน Spark พร้อมชิ้นส่วนนิยาม:

  1. ขั้นแรก ให้ส่งคําขอ POST ไปยังปลายทาง https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items/{sjditemid}/getDefinitionParts?format=SparkJobDefinitionV2. ตรวจสอบให้แน่ใจว่าค่าของพารามิเตอร์คิวรีรูปแบบเป็นSparkJobDefinitionV2
  2. จากนั้นในส่วนหัวของการตอบกลับ ให้ตรวจสอบรหัสสถานะ HTTP รหัส HTTP 202 แสดงว่าคําขอได้รับการยอมรับเรียบร้อยแล้ว คัดลอก x-ms-operation-id ค่าจากส่วนหัวของการตอบกลับ
  3. สุดท้าย ให้ส่งคําขอ GET ไปยังปลายทาง https://api.fabric.microsoft.com/v1/operations/{operationId} ด้วยค่าที่ x-ms-operation-id คัดลอกเพื่อรับผลการดําเนินการ ในข้อมูลตอบกลับ ฟิลด์นี้จะ definition มีการตั้งค่ารายละเอียดของรายการนิยามงาน Spark รวมถึงไฟล์นิยามหลักและไฟล์ลิบอื่น ๆ ภายใต้ parts ฟิลด์นั้น

อัปเดตรายการนิยามงาน Spark ด้วยไฟล์นิยามหลักและไฟล์ลิบอื่น ๆ ภายใต้รูปแบบ v2

หากต้องการอัปเดตรายการนิยามงาน Spark ที่มีอยู่ด้วยไฟล์นิยามหลักและไฟล์ลิบอื่น ๆ ภายใต้รูปแบบ v2 คุณสามารถใช้โครงสร้างเพย์โหลดที่คล้ายกับกระบวนการสร้าง นี่คือตัวอย่างการอัปเดตรายการกําหนดงาน 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/lib2.py",
        "payload": "<REDACTED>",
        "payloadType": "InlineBase64"
      }
    ]
  }
}

ด้วยเพย์โหลดข้างต้น จะมีการเปลี่ยนแปลงต่อไปนี้กับไฟล์:

  1. ไฟล์ main.py ได้รับการอัปเดตด้วยเนื้อหาใหม่
  2. lib1.py จะถูกลบออกจากรายการนิยามงาน Spark นี้และยังถูกลบออกจากที่เก็บข้อมูล OneLake ด้วย
  3. ไฟล์ lib2.py ใหม่จะถูกเพิ่มลงในรายการนิยามงาน Spark นี้และอัปโหลดไปยังที่เก็บข้อมูล OneLake

เพื่ออัปเดตรายการนิยามงาน Spark ให้ส่งคําขอ POST ไปยังปลายทาง https://api.fabric.microsoft.com/v1/workspaces/{workspaceId}/items/{sjditemid} ที่มีข้อมูลข้างต้น การตอบกลับรหัส HTTP 202 แสดงว่ารายการกําหนดงาน Spark ได้รับการอัปเดตสําเร็จแล้ว