資料來源提供 mlflow-experiment Spark DataFrameReader API,用於將 MLflow 實驗執行資料載入 DataFrame。 Azure Databricks 使用者常用它來分析訓練執行結果、比較實驗間的指標,並在實驗歷史基礎上建立儀表板。 如需詳細資訊,請參閱 使用 MLflow 實驗組織訓練執行。
先決條件
讀取 MLflow 實驗執行資料需要 Databricks Runtime 6.0 ML 及以上版本。
Usage
以下範例展示了如何使用 Spark DataFrame API 載入與過濾 MLflow 實驗資料。
從筆記本實驗載入數據
若要從目前筆記本的實驗載入資料,請在不帶任何引數的情況下呼叫 load()。
Python
df = spark.read.format("mlflow-experiment").load()
display(df)
Scala
val df = spark.read.format("mlflow-experiment").load()
display(df)
使用實驗標識碼載入數據
要從一個或多個工作區實驗載入資料,請以逗號分隔字串的方式將實驗 ID 傳遞給 load()。
Python
df = spark.read.format("mlflow-experiment").load("3270527066281272")
display(df)
Scala
val df = spark.read.format("mlflow-experiment").load("3270527066281272,953590262154175")
display(df)
使用實驗名稱載入資料
要依實驗名稱載入資料,請使用 MLflow 用戶端將名稱解析為 ID,然後將 ID 傳給 load()。
Python
expId = mlflow.get_experiment_by_name("/Shared/diabetes_experiment/").experiment_id
df = spark.read.format("mlflow-experiment").load(expId)
display(df)
Scala
val expId = mlflow.getExperimentByName("/Shared/diabetes_experiment/").get.getExperimentId
val df = spark.read.format("mlflow-experiment").load(expId)
display(df)
根據計量和參數篩選數據
載入實驗資料後,使用標準 DataFrame 濾波表達式來跨度量與參數查詢。
Python
df = spark.read.format("mlflow-experiment").load("3270527066281272")
filtered_df = df.filter("metrics.loss < 0.01 AND params.learning_rate > '0.001'")
display(filtered_df)
Scala
val df = spark.read.format("mlflow-experiment").load("3270527066281272")
val filtered_df = df.filter("metrics.loss < 1.85 AND params.num_epochs > '30'")
display(filtered_df)
輸出結構描述
由 mlflow-experiment 資料來源傳回的結構描述是固定的,無論載入哪個實驗皆然:
root
|-- run_id: string
|-- experiment_id: string
|-- metrics: map
| |-- key: string
| |-- value: double
|-- params: map
| |-- key: string
| |-- value: string
|-- tags: map
| |-- key: string
| |-- value: string
|-- start_time: timestamp
|-- end_time: timestamp
|-- status: string
|-- artifact_uri: string
其他資源
-
使用 Apache Spark DataFrames 讀取 OpenSharing 共享資料表:如果您的資料是透過 Delta Sharing 共享而非儲存在 MLflow,請使用
deltasharing相同 DataFrameReader API 的格式來讀取共享資料表。