教學第一部分:使用 Apache Spark 將資料匯入 Microsoft Fabric 湖屋

本教學以三角洲湖格式將資料匯入 Fabric 湖屋。 我們會在這裡定義一些重要的詞彙:

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

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

  • Azure Open Datasets 是經過策劃的公開資料集,為機器學習解決方案增添情境特定功能。 這會導致更精確的模型。 Open Datasets 是位於 Microsoft Azure Storage 上的雲端資源。 Apache Spark、REST API、Data Factory 和其他工具可以存取開放數據集。

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

  • 從 Azure Open Datasets 容器讀取資料。
  • 將資料寫入 Fabric 湖倉 Delta 表格。

必要條件

備註

在開始之前,務必完成 「準備你的系統 」步驟:建立工作區、建立湖邊小屋,並附加到你的筆記本上。 本教學中使用的範例資料來自 Azure Open Datasets 的公開容器,並透過筆記本程式碼以程式方式存取。

使用筆記本跟著做

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

提示

本教學會讀取 Azure Open Datasets 容器中的範例資料。 如果在載入資料時遇到存取錯誤,你可以手動從 churn.csv 下載 檔案,並將其上傳到你的資料湖。

銀行客戶流失資料

數據集包含 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 新增 至筆記本。 無法這麼做會導致錯誤。

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.")

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