Dela via


Självstudie del 1: Mata in data i ett Microsoft Fabric Lakehouse med Apache Spark

I den här handledningen kommer du att importera data till fabric lakehouses i delta lake-format. Några viktiga termer att förstå:

  • Lakehouse – En lakehouse är en samling filer/mappar/tabeller som representerar en databas över en datasjö som används av Spark-motorn och SQL-motorn för bearbetning av stordata och som innehåller förbättrade funktioner för ACID-transaktioner när du använder deltaformaterade tabeller med öppen källkod.

  • Delta Lake – Delta Lake är ett lagringslager med öppen källkod som ger ACID-transaktioner, skalbar metadatahantering och bearbetning av batch- och strömmande data till Apache Spark. En Delta Lake-tabell är ett datatabellformat som utökar Parquet-datafiler med en filbaserad transaktionslogg för ACID-transaktioner och skalbar metadatahantering.

  • Azure Open Datasets är kurerade offentliga datauppsättningar som du kan använda för att lägga till scenariospecifika funktioner i maskininlärningslösningar för mer exakta modeller. Öppna datauppsättningar finns i molnet på Microsoft Azure Storage och kan nås med olika metoder, till exempel Apache Spark, REST API, Data Factory och andra verktyg.

I den här självstudien använder du Apache Spark för att:

  • Läsa data från Azure Open Datasets-containrar.
  • Skriv data till en Fabric lakehouse delta-tabell.

Förutsättningar

  • Lägg till en lakehouse- i den här notebook-filen. Du kommer att ladda ned data från en offentlig blob och sedan lagra datan i lakehouse.

Följ med i notebooken

1-ingest-data.ipynb är anteckningsboken som medföljer den här handledningen.

Bankomsättningsdata

Datamängden innehåller avhoppsstatus för 10 000 kunder. Den innehåller även attribut som kan påverka omsättning, till exempel:

  • Kreditpoäng
  • Geografiskt läge (Tyskland, Frankrike, Spanien)
  • Kön (man, kvinna)
  • Ålder
  • Kundtid (år som bankens kund)
  • Kontosaldo
  • Beräknad lön
  • Antal produkter som en kund har köpt via banken
  • Kreditkortsstatus (om en kund har ett kreditkort eller inte)
  • Aktiv medlemsstatus (oavsett om en aktiv banks kund eller inte)

Datamängden innehåller även kolumner som radnummer, kund-ID och kundens efternamn som inte ska påverka kundens beslut att lämna banken.

Händelsen som definierar kundens bortfall är stängningen av kundens bankkonto. Kolumnen exited i datamängden avser kundbortfall. Det finns inte mycket sammanhang om dessa attribut, så du måste fortsätta utan bakgrundsinformation om datauppsättningen. Syftet är att förstå hur dessa attribut bidrar till exited status.

Exempelrader från datauppsättningen:

"CustomerID" "Efternamn" Kreditvärdighet Geografi Genus "Ålder" "Besittningsrätt" "Saldo" AntalProdukter "HasCrCard" ÄrAktivMedlem Beräknad lön "Avslutad"
15634602 Hargrave 619 Frankrike Kvinnlig 42 2 0.00 1 1 1 101348.88 1
15647311 Kulle 608 Spanien Kvinnlig 41 1 83807.86 1 0 1 112542.58 0

Ladda ner datauppsättningen och ladda upp till lakehouse

Tips

Genom att definiera följande parametrar kan du enkelt använda den här notebook-filen med olika datauppsättningar.

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

Den här koden laddar ned en offentligt tillgänglig version av datauppsättningen och lagrar den sedan i ett datalager.

Viktig

Se till att du lägger till ett lakehouse- i anteckningsboken innan du kör anteckningsboken. Om du inte gör det uppstår ett fel.

import os, requests
if not IS_CUSTOM_DATA:
# Download demo data files into lakehouse if not exist
    remote_url = "https://synapseaisolutionsa.blob.core.windows.net/public/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.")

Du använder de data som du just har matat in: