全部產品
Search
文件中心

MaxCompute:DataWorks Notebook使用協助

更新時間:Mar 13, 2026

本文介紹在DataWorks Notebook中使用PySpark時的配置方法,包括自訂配置、OSS儲存訪問、第三方Python包、JAR資源、Livy參數等。

使用自訂配置

重要

如果執行%%maxcompute_spark後提示dataworks-magic版本需要升級,請確保升級後再使用以下功能,否則可能不生效。

  1. 啟動時設定SparkConf,例如設定Livy最長空閑時間(config表示和Livy相關的參數)和開啟Schema級文法開關(spark_conf表示和Spark相關的參數),其餘參數同理。

    %%maxcompute_spark
    {
      "config": {
        # cpu 和 memory 預設為1核4G
        "cpu": 1,
        "memory": "4096M",
        "livy.server.max.idle.time": "10m"
      },
      "quota": "XXX",
      "spark_conf": {
        "spark.sql.catalog.odps.enableNamespaceSchema": "true"
      }
    }
  2. 如果需要修改配置,只需重新執行上述代碼即可。但是重啟Spark Session會丟失之前的工作階段狀態。

使用OSS儲存

配置OSS訪問參數:

重要
  • oss_endpoint必須使用Internal內網地址,例如:oss-cn-shanghai-internal.aliyuncs.com

  • 請不要在Notebook中設定spark.hadoop.fs.oss.implspark.hadoop.fs.AbstractFileSystem.oss.impl這兩個參數,否則可能導致無法訪問OSS。

%%maxcompute_spark
{
  "spark_conf": {
    "spark.hadoop.odps.cupid.trusted.services.access.list": "<bucket-name>.<oss-endpoint>",
    "spark.hadoop.fs.oss.accessKeyId": "***",
    "spark.hadoop.fs.oss.accessKeySecret": "***",
    "spark.hadoop.fs.oss.endpoint": "<oss-endpoint>"
  }
}

使用第三方Python包

  1. 打包依賴:推薦使用pyodps-pack,強烈建議指定Python版本為3.11,因為Livy Spark Session預設使用Python 3.11,保持一致可避免相容性問題。參考PySpark Python版本和依賴

    # 安裝pyodps
    pip install pyodps
    
    # 準備requirements.txt,然後打包
    pyodps-pack -r requirements.txt --python-version=3.11 -o <package-name>
  2. 上傳包到MaxCompute Project

    -- 在odpscmd中執行
    ADD archive /path/to/<package-name> -f;
  3. 配置Spark使用該包

    說明
    • 如果有多個cupid.resources用逗號(",")隔開,該參數具體效果請參考資料互連配置

    • 如果有多個PYTHONPATH路徑用冒號(":")隔開。當前樣本中PYTHONPATH帶packages子目錄是因為pyodps-pack打包會自動包含該子目錄,如果是其他方式打包請明確目錄結構再填寫PYTHONPATH。關於PYTHONPATH更多詳情請參考引用使用者自訂的python包

    %%maxcompute_spark
    {
      "spark_conf": {
        "spark.hadoop.odps.cupid.resources": "<your_project>.<package-name>",
        "spark.executorEnv.PYTHONPATH": "./<your_project>.<package-name>/packages",
        "spark.yarn.appMasterEnv.PYTHONPATH": "./<your_project>.<package-name>/packages"
      }
    }

使用JAR或其他資源套件

  1. 上傳資源(以tar.gz為例):add archive /path/to/<package-name> -f;

  2. 配置Spark載入資源,多個資源用英文逗號(",")分隔:

    %%maxcompute_spark
    {
      "spark_conf": {
        "spark.hadoop.odps.cupid.resources": "<your_project>.<package-name>"
      }
    }

可與Python包配置合并使用,都填寫在spark_conf參數中。

進階配置

指定Spark版本

  • 支援的版本如下:

    • spark-3.1.1-odps0.47.0

    • spark-3.4.2-odps0.48.0(預設)

    • spark-3.5.2-odps0.49.0

  • 設定方式:

    %%maxcompute_spark
    {
      "spark_conf": {
        "spark.hadoop.odps.spark.version": "spark-3.4.2-odps0.48.0"
      }
    }

禁用預設Python 3.11環境

如需自訂Python環境:

%%maxcompute_spark
{
  "spark_conf": {
    "spark.hadoop.odps.spark.alinux3.enabled": "false"
  }
}

使用Matplotlib繪圖

先將Matplotlib打包並上傳,參考使用第三方Python包,然後在Notebook中繪圖:

%%spark

import matplotlib.pyplot as plt
import io, base64, json
import matplotlib
# 非必須
matplotlib.use('Agg')

# 必須在此處先建立figure(關鍵步驟)
fig = plt.figure()

# 樣本繪圖
x = [1, 2, 3, 4]
y = [20, 22, 19, 23]

plt.plot(x, y, marker='o', linestyle='--', color='b')
plt.title("Temperature Change Over Time")
plt.xlabel("Time")
plt.ylabel("Temperature")

# 渲染映像到Notebook(Livy魔法命令)
%matplot plt

Livy相關配置

以下列出可以控制的Livy參數:

參數名

預設值

說明

livy.server.access-control.enabled

true

是否開啟許可權控制,預設開啟,不推薦關閉。

livy.server.max.alive.time

3d

Livy Server最長存活時間,預設3天。單位支援s、m、h、d。

livy.server.max.idle.time

1h

Livy Server最長空閑時間,預設1小時,超過該時間沒有任何Spark Session就會自動關閉。

livy.server.session.timeout

12h

Spark Session最長空閑時間,預設12小時,超過該時間沒有任何Spark任務執行就會自動關閉。

livy.server.session.state-retain.sec

12h

Spark Session到期後最長保留時間,預設12小時,關閉後超過該時間未重啟將徹底銷毀。

livy.server.session.max-creation

50

單個Livy Server可以同時存在的Session數量上限,預設50個。