SuperAPI AI 工具集

executing-spark

编程与开发

查看项目

更新于 10-15 20:32

技能介绍

用途:在 Fabric Spark 计算上临时执行 PySpark 或 Python 代码,通过 Livy API 提交语句,不创建或持久化 notebook 工件,会话临时有效,可通过 Spark SQL 读写湖仓 Delta 表。

前提条件:Azure CLI 已认证(az login);目标工作区中有湖仓(Livy 会话针对其运行);Fabric 容量(F 或试用)。

认证:Livy API 需要来自 az account get-access-token --resource https://api.fabric.microsoft.com 的令牌,fab auth 的令牌不适用于 Spark 会话内的 OneLake 存储访问。不要输出或记录令牌。

生命周期:创建会话 POST .../sessions {"kind": "pyspark"};轮询至 state 为 idle(约 30-90 秒);提交代码 POST .../sessions/{id}/statements {"code": "...", "kind": "pyspark"};轮询结果至 state 为 available;完成后务必 DELETE .../sessions/{id}。基础 URL 为 https://api.fabric.microsoft.com/v1/workspaces/{wsId}/lakehouses/{lhId}/livyapi/versions/2023-12-01。空闲会话会消耗容量单位,默认约 20 分钟超时,自动化中应在 finally 块中清理。

获取 ID:WS_ID=$(fab get "Workspace.Workspace" -q "id" | tr -d '"');LH_ID=$(fab get "Workspace.Workspace/Lakehouse.Lakehouse" -q "id" | tr -d '"')。

可用能力:spark.sql 对湖仓表执行完整 Spark SQL;SHOW TABLES 访问元数据;df.write.mode("overwrite").saveAsTable 写入 Delta 表;纯 Python(pandas、numpy、pyarrow)在 Spark 容器运行;内存中 Spark DataFrame 与转换;同一会话内多条顺序语句。

限制:未预装 deltalake(delta-rs),需改用 Spark SQL;notebookutils 功能有限(无 /lakehouse/default/ FUSE 挂载);令牌约 60 分钟过期,长会话需刷新;fab auth 令牌不可用。

适用场景:需要写回湖仓、临时转换不留工件、或由编排器驱动的计算。只读探索可用本地 DuckDB;复杂多单元工作流用 notebook;定时 ETL 用 notebook 任务。会话为交互式并按空闲计费,一次性任务宜用 Livy 批处理(同基础 URL 的 /batches)。Livy 语句直接在响应中返回结果,而 notebook 任务状态可能显示 Completed 但实际失败,需读取真实退出值。