本文將引導您掌握 DataWorks Notebook 的進階用法,核心目標是協助您打通互動式開發與生產調度執行之間的壁壘。您將學習如何通過代碼複用、資料掛載、參數管理等工程化手段提升開發效率,並掌握串連 MaxCompute Spark、EMR Serverless Spark 及 AnalyticDB for Spark 等多種計算引擎的實踐技巧與調試方法。
推薦您優先閱讀Notebook 基礎開發。
理解開發與生產環境的差異
DataWorks Notebook 的核心定位是可被調度執行的開發和分析工具。這意味著它存在兩種運行環境:
開發環境:在Data Studio的Notebook 節點編輯頁面,直接點擊運行儲存格,代碼在個人開發環境執行個體中執行。此環境為快速驗證、調試代碼邏輯而設計。
生產環境:Notebook 節點被提交並發布後,通過周期調度或補資料等觸發執行。代碼在一個獨立的、臨時的任務執行個體中運行。此環境為穩定、可靠地執行生產任務而設計。
這兩種環境在功能支援上存在顯著差異,提前理解這些差異是高效開發的關鍵。
開發與生產環境能力差異速查表
功能點 | 開發環境(運行儲存格) | 生產環境(周期調度/補資料等) |
引用專案資源 ( |
| 自動生效。 |
讀寫資料集 (OSS/NAS) | 需在個人開發環境中掛載資料集。 | 需在調度配置中掛載資料集。 |
引用工作空間參數 ( | 生效,在代碼執行前自動進行文本替換。 | 生效,在任務執行前自動進行文本替換。 |
Spark 會話管理 | Spark會話的預設閑置釋放時間為2小時,2小時內無新的代碼執行將自動釋放。 | 任務執行個體級短會話,隨任務執行個體執行而自動建立與銷毀。 |
在生產環境複用代碼與資料
引用專案資源(.py 檔案)
將通用的函數或類封裝在獨立的 .py 檔案中,通過##@resource_reference{"自訂名.py"}引用MaxCompute資源的方式,實現代碼的模組化與複用,提升代碼的可維護性。
建立並發布 Python 資源
在 DataWorks Data Studio左側導覽列單擊
,進入資源管理。在資源管理分類樹下,按右鍵目標目錄或單擊右上方的 + ,選擇建立資源 > MaxCompute Python,命名為
my_utils.py。在檔案內容處,點擊線上編輯,將您調試好的工具函數代碼粘貼到代碼編輯框並儲存。
# my_utils.py def greet(name): return f"Hello, {name} from resource file!"單擊工具列中的儲存,然後發布該資源,使其對開發和生產任務可見。
在 Notebook 中引用資源
在 Notebook 的Python 儲存格的第一行,使用
##@resource_reference文法引用發行的資源。##@resource_reference{"my_utils.py"} # 如果資源在目錄下,比如 my_folder/my_utils.py,也是通過##@resource_reference{"my_utils.py"},無需帶目錄名稱。 from my_utils import greet message = greet('DataWorks') print(message)開發環境調試運行
運行Python儲存格,將列印如下結果:
Hello, DataWorks from resource file!重要在開發環境調試運行時,如果識別到代碼中包含
##@resource_reference,系統將會把資源管理中的目標檔案自動下載至個人目錄的workspace/_dataworks/resource_references路徑中,從而進行目標檔案的引用。若報錯
ModuleNotFoundError,點擊編輯器上方工具列的重啟按鈕重新載入資源後再重試。發布至生產環境並驗證
儲存並發布此 Notebook 節點後,前往營運中心 > 周期任務單擊測試運行。任務成功後,您將在日誌中看到輸出
Hello, DataWorks from resource file!。重要若報錯
There is no file with id ...,請先將Python資源發布至生產環境。
更多操作,請參見MaxCompute資源與函數。
讀寫資料集(OSS/NAS)
在 Notebook 任務運行時,方便地讀寫儲存在 OSS 或 NAS 上的大規模檔案資料。
開發環境調試
掛載資料集:進入個人開發環境詳情頁,在儲存配置 > 資料集中配置資料集。
在代碼中訪問:資料集將被掛載到個人開發環境的掛載路徑下,在代碼中直接讀寫該路徑。
# 假設已在個人開發環境設定了掛載路徑為/mnt/data/dataset的資料集 import pandas as pd # 直接使用掛載路徑 file_path = '/mnt/data/dataset/testfile.csv' df = pd.read_csv(file_path) # 使用 PyODPS 將資料寫入 MaxCompute o = %odps o.write_table('mc_test_table', df, overwrite=True) print(f"成功將資料寫入 MaxCompute 表 mc_test_table。")
生產環境部署
掛載資料集:在 Notebook 節點編輯頁面的右側導覽列,進入調度配置 > 調度策略,添加上述資料集。
在代碼中訪問:提交發布之後,資料集將被掛載到生產環境的掛載路徑下,在代碼中直接讀寫該路徑。
# 假設已在個人開發環境設定了掛載路徑為/mnt/data/dataset的資料集 import pandas as pd # 直接使用掛載路徑 file_path = '/mnt/data/dataset/testfile.csv' df = pd.read_csv(file_path) # 使用 PyODPS 將資料寫入 MaxCompute o = %odps o.write_table('mc_test_table', df, overwrite=True) print(f"成功將資料寫入 MaxCompute 表 mc_test_table。")
更多操作,請參見在個人開發環境中使用資料集。
引用工作空間參數
僅支援DataWorks專業版及以上。
DataWorks 在已有調度參數的基礎上引入工作空間參數,主要是為瞭解決跨任務、跨節點的全域配置複用與環境隔離問題。可在SQL儲存格和Python儲存格內以${workspace.param}格式來引用工作空間參數,其中param是您建立的工作空間參數名稱。
1、建立工作空間參數:使用前,需前往 DataWorks 營運中心 > 調度設定 > 工作空間參數 頁面建立所需參數。
2、引用工作空間參數:
SQL儲存格參照工作空間參數。
SELECT '${workspace.param}';查詢工作空間參數,運行成功後,將列印輸出工作空間參數的具體賦值。
Python儲存格參照工作空間參數。
print('${workspace.param}')輸出工作空間參數,運行成功後,將列印輸出工作空間參數的具體賦值。
更多詳情,請參見使用工作空間參數。
Magic Command與計算引擎互動
Magic Command 是以 % 或 %% 開頭的特殊命令,用於簡化Python儲存格與各類計算資源的互動。
串連 MaxCompute
在建立MaxCompute計算資源串連前,請確保已綁定MaxCompute計算資源。
%odps:擷取 PyODPS 入口對象此命令返回一個與當前MaxCompute專案綁定、已認證的 PyODPS 對象,避免在代碼中寫入程式碼 AccessKey,是與 MaxCompute 互動的推薦方式。
使用Magic Command建立MaxCompute串連。 輸入
%odps,右下角會出現MaxCompute的計算資源選取器入口(並自動選擇計算資源)。點擊右下角的MaxCompute專案名稱,可更換MaxCompute專案。o=%odps使用擷取到的MaxCompute計算資源運行PyODPS指令碼。
例如,擷取當前專案下的所有表:
with o.execute_sql('show tables').open_reader() as reader: print(reader.raw)
%maxframe:建立 MaxFrame 串連此命令用於建立 MaxFrame 會話,為 MaxCompute 提供類似 Pandas 的分布式資料處理能力。
# 串連並訪問MaxCompute MaxFrame Session mf_session = %maxframe df = mf_session.read_odps_table('your_mc_table') print(df.head()) # 開發調試結束後,應手動銷毀會話以釋放資源 mf_session.destroy()
串連 Spark 計算資源
DataWorks Notebook 支援串連多種 Spark 引擎。不同引擎在串連方式、執行內容和資源管理上存在差異。
同一個Notebook節點,僅支援使用Magic Command串連一種計算資源。
引擎對比
特性 | MaxCompute Spark | EMR Serverless Spark | AnalyticDB for Spark |
串連命令 |
|
|
|
說明 執行後,整個 Notebook 核心的執行內容會切換至遠端的 PySpark 環境。後續儲存格可直接編寫 PySpark 代碼。 | |||
前提條件 | 綁定 MaxCompute 資源。 | 綁定 EMR 計算資源 並建立 Livy Gateway。 | 綁定 ADB Spark 計算資源。 |
開發環境模式 | 自動建立/複用 Livy 會話。 | 串連已有的 Livy Gateway,建立會話。 | 自動建立/複用 Spark Connect Server。 |
生產環境模式 | Livy模式:通過 Livy 服務提交 Spark 作業。 | spark-submit 批處理模式:純批處理,不保留工作階段狀態。 | Spark Connect Server 模式:通過 Spark 串連服務進行互動。 |
生產資源釋放 | 任務執行個體結束後自動釋放會話。 | 任務執行個體結束後自動清理資源。 | 任務執行個體結束後自動釋放資源。 |
適用情境 | 與 MaxCompute 生態緊密整合的通用批處理、ETL 任務。 | 需要靈活配置、與開源巨量資料生態(如 Hudi, Iceberg)互動的複雜分析任務。 | 針對 ADB for MySQL C-Store 表的高效能互動式查詢與分析。 |
MaxCompute Spark
在建立MaxCompute計算資源串連前,請確保已綁定MaxCompute計算資源。
通過 Livy 串連到 MaxCompute 專案內建的 Spark 引擎。
建立串連:在 Python 儲存格中運行以下命令。系統將自動建立或複用 Spark 會話。
# 建立Spark Session,並停止Livy。 %maxcompute_spark執行 PySpark 代碼:串連成功後,在新的 Python 儲存格中,使用
%%sparkCell Magic 執行 PySpark 代碼。# 在使用MaxCompute Spark時,Python儲存格中必須以%%spark作為首行代碼 %%spark df = spark.sql("SELECT * FROM your_mc_table LIMIT 10") df.show()手動釋放串連:在開發調試結束後,可手動停止或刪除會話。在生產環境運行時,系統將自動停止並刪除當前任務執行個體的Livy,無需手動處理。
# 清理Spark Session,並停止Livy。 %maxcompute_spark stop # 清理Spark Session,並停止Livy,最後刪除Livy %maxcompute_spark delete
EMR Serverless Spark
在建立計算資源串連前,請先在工作空間綁定EMR Serverless Spark計算資源,並建立Livy Gateway。
通過串連您預先建立的 Livy Gateway 與 EMR Serverless Spark 互動。
建立串連:在執行命令前,需在儲存格右下角選擇要串連的 EMR 計算資源 和 Livy Gateway。
# 基礎串連 %emr_serverless_spark # 或在串連時傳入自訂 Spark 參數,注意需要自訂Spark參數時,需要寫兩個百分比符號 %%emr_serverless_spark { "spark_conf": { "spark.emr.serverless.environmentId": "<EMR Serverless Spark 運行環境ID>", "spark.emr.serverless.network.service.name": "<EMR Serverless Spark 網路連接ID>", "spark.driver.cores": "1", "spark.driver.memory": "8g", "spark.executor.cores": "1", "spark.executor.memory": "2g", "spark.driver.maxResultSize": "32g" } }說明自訂參數與全域配置的關係
預設行為:您在此處定義的自訂參數僅對本次串連(Session)生效,是一次性的。如果您未提供自訂參數,系統將自動使用在管理中心中配置的全域參數。
推薦用法:對於需要在多個任務或被多人複用的配置,建議在管理中心 > Serverless Spark > SPARK參數中進行全域配置,以保證一致性並方便統一管理。
優先順序規則:當同一個參數在自訂參數和全域配置中都被設定時,哪個最終生效,取決於管理中心中的全局配置是否優先選項:
勾選:全域配置將覆蓋本次的自訂參數。
不勾選:本次的自訂參數將覆蓋全域配置。
(可選)重新串連:若Livy gateway頁面的token被管理員誤刪後可通過該命令重新建立。
# 重新串連,重新整理當前個人開發環境的livy token %emr_serverless_spark refresh_token執行 PySpark 或 SQL 代碼:串連成功後,核心已切換。您可以在 Python 儲存格 中直接編寫 PySpark 代碼,或在 EMR Spark SQL 儲存格 中編寫 SQL。
通過EMR Spark SQL向計算資源提交並執行SQL代碼
經過
%emr_serverless_spark成功建立串連後,可在EMR Spark SQL Cell中,直接寫SQL語句,無需在儲存格中選擇計算資源。EMR Spark SQL Cell將複用
%emr_serverless_spark的串連,提交至目標計算資源中運行。
通過Python向計算資源提交並執行PySpark代碼
通過
%emr_serverless_spark成功建立串連後,可以在新的Python儲存格中提交和執行PySpark代碼,無需在儲存格中添加%%spark首碼。
手動釋放串連
重要在多人共用一個 Livy Gateway 的情況下,`stop` 或 `delete` 命令會影響所有正在使用該網關的使用者,請謹慎操作。
# 清理Spark Session,並停止Livy。 %emr_serverless_spark stop # 清理Spark Session,並停止Livy,最後刪除Livy %emr_serverless_spark delete
AnalyticDB for Spark
在建立計算資源串連前,請先在工作空間綁定AnalyticDB for Spark計算資源。
通過建立 Spark Connect Server 串連到 AnalyticDB for Spark 引擎。
建立串連:為確保網路連通,必須在串連參數中正確配置交換器 ID 和安全性群組 ID。 在執行命令前,需在儲存格右下角選擇 ADB Spark 計算資源。
# 必須配置交換器ID和安全性群組ID以建立網路連接 %adb_spark add \ --spark-conf spark.adb.version=3.5 \ --spark-conf spark.adb.eni.enabled=true \ --spark-conf spark.adb.eni.vswitchId=<ADB的交換器ID> \ --spark-conf spark.adb.eni.securityGroupId=<個人開發環境的安全性群組ID>執行 PySpark 代碼:串連成功後,在新的 Python 儲存格中,執行 PySpark 代碼。
# 只能對 C-Store 表執行操作 df = spark.sql("SELECT * FROM my_adb_cstore_table LIMIT 10") df.show()說明:AnalyticDB for Spark 引擎當前只能處理具有
'storagePolicy'='COLD'屬性的 C-Store 表。手動釋放串連:在開發環境調試結束後,手動清理串連會話以節約資源。生產環境運行時,系統將自動清理資源。
%adb_spark cleanup
附錄:Magic Command 速查表
Magic Command | Magic Command含義 | 適用計算引擎 |
| 擷取 PyODPS 入口對象 | MaxCompute |
| 建立 MaxFrame 串連 | |
| 建立Spark Session | MaxCompute Spark |
| 清理Spark Session,並停止Livy。 | |
| 清理Spark Session,停止並刪除Livy。 | |
| 在Python儲存格中,串連已建立的Spark計算資源。 | |
| 建立Spark Session | EMR Serverless Spark |
| 查看Livy Gateway的詳細資料。 | |
| 清理Spark Session,並停止Livy。 | |
| 清理Spark Session,停止並刪除Livy。 | |
| 重新整理個人開發環境的Livy Token | |
| 建立並串連到一個可複用的ADB Spark會話(Session)。 | AnalyticDB for Spark |
| 查看Spark Session資訊. | |
| 停止並清理當前的Spark串連會話。 |
常見問題
Q:引用工作空間資源時,報錯
ModuleNotFoundError或There is no file with id ...?A:請按照以下步驟檢查。
請前往資料開發 > 資源管理,確保MaxCompute Python資源已儲存;如果是生產環境報該錯誤,需確認資源發行至生產環境。
請點擊Notebook編輯器上方工具列的重啟按鈕,嘗試重新載入資源。
Q:當我更新工作空間資源後,為什麼還是引用舊資源?
A:當對資源修改重新發布時,需在Data Studio設定中,修改資源衝突處理策略
Dataworks › Notebook › Resource Reference: Download Strategy為autoOverwrite,並在Notebook頂部工具列點擊重啟Kernel。Q:引用資料集時,開發環境報錯
FileNotFoundError?A:請確保已在當前選擇的個人開發環境中掛載資料集。
Q:引用資料集時,開發環境成功,但生產環境報錯
Execute mount dataset exception! Please check your dataset config。A:請確保已在Notebook節點的調度配置掛載資料集,並給OSS資料集完成授權。

Q:如何查看個人開發環境的版本?
A:進入個人開發環境後,通過快速鍵CMD+SHIFT+P,並輸入ABOUT查看目前的版本。若隨著產品功能更新與迭代,需要0.5.69及以上版本的個人開發環境執行個體,可通過介面升級提示彈窗執行一鍵升級。
Q:串連 Spark 引擎失敗?
A:請按照以下步驟檢查。
通用檢查:前往工作空間詳情的計算資源清單,確認對應的計算資源(MaxCompute/EMR/ADB)是否已正確綁定到當前工作空間,且您的帳號具備相應許可權。
EMR Serverless Spark:檢查 Livy Gateway 是否已建立且狀態正常。
AnalyticDB for Spark:重點排查網路問題。確認
vswitchId和securityGroupId配置正確,確保個人開發環境與 ADB Spark 執行個體之間網路互連。檢查安全性群組規則是否允許必要的連接埠通訊。