共用方式為


教學課程第 1 部分:使用 Apache Spark 將數據內嵌至 Microsoft Fabric Lakehouse

本教學課程會以 Delta Lake 格式將數據匯入 Fabric Lakehouses。 我們會在這裡定義一些重要的詞彙:

  • Lakehouse - Lakehouse 是代表數據湖上資料庫之檔案、資料夾和/或數據表的集合。 Spark 引擎和 SQL 引擎會使用 Lakehouse 資源來處理巨量數據處理。 當您使用開放原始碼 Delta 格式的數據表時,該處理會包含增強的 ACID 交易功能。

  • Delta Lake - Delta Lake 是開放原始碼儲存層,可將 ACID 交易、可調整的元數據管理和批次和串流數據處理帶入 Apache Spark。 作為資料表格式,Delta Lake 使用基於檔案的事務日志來擴展 Parquet 資料檔案,以進行 ACID 交易和可擴展的元數據管理。

  • Azure 開放數據集 是策劃的公用數據集,可將案例特定功能新增至機器學習解決方案。 這會導致更精確的模型。 開放資料集是位於 Microsoft Azure 儲存體上的雲端資源。 Apache Spark、REST API、Data Factory 和其他工具可以存取開放數據集。

在本教學課程中,您可以使用 Apache Spark 來:

  • 從 Azure 開放資料集容器讀取資料。
  • 將資料寫入 Fabric Lakehouse 差異資料表。

必要條件

遵循筆記本中的指示

1-ingest-data.ipynb 筆記本會伴隨本教學課程。

銀行流失資料

數據集包含 10,000 個客戶的變換狀態資訊。 它也包含可能會影響流失的屬性,例如:

  • 信用分數
  • 地理位置 (德國、法國、西班牙)
  • 性別 (男性、女性)
  • 年齡
  • 任期(客戶是該銀行的客戶年數)
  • 帳戶餘額
  • 估算薪資
  • 客戶透過銀行購買的產品數目
  • 信用卡狀態 (客戶是否有信用卡)
  • 活躍成員狀態(客戶是否有活躍銀行客戶狀態)

資料集也包含這些資料列:

  • 列編號
  • 客戶標識碼
  • 客戶姓氏

這些欄應該不會影響客戶離開銀行的決定。

客戶銀行帳戶的關閉會定義該客戶的流失。 數據集 exited 欄是指客戶的放棄。 關於這些屬性的背景資訊很少,因此您必須在缺乏背景資訊的情況下繼續進行。 我們的目標是了解這些屬性如何影響exited狀態。

範例資料集資料列:

“CustomerID” 姓氏 “CreditScore” 地理學 性別 “年齡” “任期” “餘額” 產品數量 “HasCrCard” “IsActiveMember” 預估薪資 離開
15634602 哈格雷夫 619 法國 女性 42 2 0.00 1 1 1 101348.88 1
15647311 608 西班牙 女性 41 1 83807.86 1 0 1 112542.58 0

下載資料集並上傳至 Lakehouse

提示

當您定義下列參數時,可以輕鬆地將此筆記本與不同的數據集搭配使用:

IS_CUSTOM_DATA = False  # if TRUE, dataset has to be uploaded manually

DATA_ROOT = "/lakehouse/default"
DATA_FOLDER = "Files/churn"  # folder with data files
DATA_FILE = "churn.csv"  # data file name

下列代碼段會下載公開可用的數據集版本,然後將該資源儲存在 Fabric Lakehouse 中:

重要

執行之前,請務必 將 Lakehouse 新增 至筆記本。 無法這麼做會導致錯誤。

import os, requests
if not IS_CUSTOM_DATA:
# Download demo data files into lakehouse if not exist
    remote_url = "https://synapseaisolutionsa.z13.web.core.windows.net/data/bankcustomerchurn"
    file_list = [DATA_FILE]
    download_path = f"{DATA_ROOT}/{DATA_FOLDER}/raw"

    if not os.path.exists("/lakehouse/default"):
        raise FileNotFoundError(
            "Default lakehouse not found, please add a lakehouse and restart the session."
        )
    os.makedirs(download_path, exist_ok=True)
    for fname in file_list:
        if not os.path.exists(f"{download_path}/{fname}"):
            r = requests.get(f"{remote_url}/{fname}", timeout=30)
            with open(f"{download_path}/{fname}", "wb") as f:
                f.write(r.content)
    print("Downloaded demo data files into lakehouse.")

您使用您剛才匯入的資料: