Självstudie: Extrahera, transformera och läsa in data med hjälp av Azure Databricks

I den här självstudien utför du en ETL-åtgärd (extrahera, transformera och läsa in data) med hjälp av Azure Databricks. Du extraherar data från Azure Data Lake Storage Gen2 till Azure Databricks, kör transformeringar på data i Azure Databricks och läser in omvandlade data till Azure Synapse Analytics.

Stegen i den här självstudien använder Azure Synapse-anslutningsappen för Azure Databricks för att överföra data till Azure Databricks. Den här anslutningsappen använder i sin tur Azure Blob Storage som tillfällig lagring för de data som överförs mellan ett Azure Databricks-kluster och Azure Synapse.

Följande bild visar programflödet:

Azure Databricks with Data Lake Store and Azure Synapse

Den här självstudien omfattar följande uppgifter:

  • Skapa en Azure Databricks-tjänst.
  • Skapa ett Spark-kluster i Azure Databricks.
  • Skapa ett filsystem i Data Lake Storage Gen2-kontot.
  • Ladda upp exempeldata till Azure Data Lake Storage Gen2-kontot.
  • Skapa ett huvudnamn för tjänsten.
  • Extrahera data från Azure Data Lake Storage Gen2-kontot.
  • Transformera data med Azure Databricks.
  • Läs in data i Azure Synapse.

Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.

Kommentar

Den här självstudien kan inte utföras med azures kostnadsfria utvärderingsprenumeration. Om du har ett kostnadsfritt konto går du till din profil och ändrar prenumerationen till Betala per användning. Mer information finns i Kostnadsfritt Azure-konto. Ta sedan bort utgiftsgränsen och begär en kvotökning för vCPU:er i din region. När du skapar din Azure Databricks-arbetsyta kan du välja prisnivån Utvärderingsversion (Premium – 14 dagars kostnadsfria DBUs) för att ge arbetsytan åtkomst till kostnadsfria Premium Azure Databricks DBUs i 14 dagar.

Förutsättningar

Slutför de här uppgifterna innan du startar självstudien:

Samla in den information som du behöver

Se till att du slutför kraven för den här självstudien.

Innan du börjar bör du ha följande information:

✔️ Databasnamn, databasservernamn, användarnamn och lösenord för Din Azure Synapse.

✔️ Åtkomstnyckeln för ditt bloblagringskonto.

✔️ Namnet på ditt Data Lake Storage Gen2-lagringskonto.

✔️ Klientorganisations-ID för din prenumeration.

✔️ Program-ID för den app som du registrerade med Microsoft Entra-ID (tidigare Azure Active Directory).

✔️ Autentiseringsnyckeln för appen som du registrerade med Microsoft Entra-ID (tidigare Azure Active Directory).

Skapa en Azure Databricks-tjänst

I det här avsnittet skapar du en Azure Databricks-tjänst i Azure Portal.

  1. Från Azure-portal menyn, välj skapa en resurs.

    Create a resource on Azure portal

    Välj sedan Analytics>Azure Databricks.

    Create Azure Databricks on Azure portal

  2. Ange följande värden under Azure Databricks-tjänst för att skapa en Databricks-tjänst:

    Property beskrivning
    Namn på arbetsyta Ange ett namn för Databricks-arbetsytan.
    Abonnemang I listrutan väljer du din Azure-prenumeration.
    Resursgrupp Ange om du vill skapa en ny resursgrupp eller använda en befintlig. En resursgrupp är en container som innehåller relaterade resurser för en Azure-lösning. Mer information finns i översikten över Azure-resursgrupper.
    Plats Välj USA, västra 2. För andra tillgängliga regioner läser du informationen om Azure-tjänsttillgänglighet per region.
    Prisnivå Välj Standard.
  3. Det tar några minuter att skapa kontot. Du kan övervaka åtgärdsstatusen i förloppsindikatorn längst upp.

  4. Välj Fäst på instrumentpanelen och välj sedan Skapa.

Skapa ett Spark-kluster i Azure Databricks

  1. Gå till Databricks-tjänsten du skapade i Azure Portal och välj Starta arbetsyta.

  2. Du omdirigeras till Azure Databricks-portalen. I portalen väljer du Kluster.

    Databricks on Azure

  3. På sidan Nytt kluster anger du värdena för att skapa ett kluster.

    Create Databricks Spark cluster on Azure

  4. Fyll i värden för följande fält och godkänn standardvärdena för de andra fälten:

    • Ange ett namn för klustret.

    • Kontrollera att du markerar kryssrutan Avsluta efter __ minuter av inaktivitet . Om klustret inte används anger du en varaktighet (i minuter) för att avsluta klustret.

    • Välj Skapa kluster. När klustret körs kan du ansluta anteckningsböcker till klustret och köra Spark-jobb.

Skapa ett filsystem i Azure Data Lake Storage Gen2-kontot

I det här avsnittet skapar du en anteckningsbok på Azure Databricks-arbetsytan och kör sedan kodavsnitt för att konfigurera lagringskontot

  1. Gå till Azure Databricks-tjänsten du skapade i Azure Portal och välj Starta arbetsyta.

  2. Välj Arbetsyta till vänster. I listrutan Arbetsyta väljer du Skapa>Anteckningsbok.

    Create a notebook in Databricks

  3. Ge anteckningsboken ett namn i dialogrutan Skapa anteckningsbok. Välj Scala som språk och välj sedan det Spark-kluster som du skapade tidigare.

    Provide details for a notebook in Databricks

  4. Välj Skapa.

  5. Följande kodblock anger standardautentiseringsuppgifter för tjänstens huvudnamn för alla ADLS Gen 2-konton som används i Spark-sessionen. Det andra kodblocket lägger till kontonamnet i inställningen för att ange autentiseringsuppgifter för ett specifikt ADLS Gen 2-konto. Kopiera och klistra in något av kodblocken i den första cellen i din Azure Databricks-notebook-fil.

    Sessionskonfiguration

    val appID = "<appID>"
    val secret = "<secret>"
    val tenantID = "<tenant-id>"
    
    spark.conf.set("fs.azure.account.auth.type", "OAuth")
    spark.conf.set("fs.azure.account.oauth.provider.type", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
    spark.conf.set("fs.azure.account.oauth2.client.id", "<appID>")
    spark.conf.set("fs.azure.account.oauth2.client.secret", "<secret>")
    spark.conf.set("fs.azure.account.oauth2.client.endpoint", "https://login.microsoftonline.com/<tenant-id>/oauth2/token")
    spark.conf.set("fs.azure.createRemoteFileSystemDuringInitialization", "true")
    

    Kontokonfiguration

    val storageAccountName = "<storage-account-name>"
    val appID = "<app-id>"
    val secret = "<secret>"
    val fileSystemName = "<file-system-name>"
    val tenantID = "<tenant-id>"
    
    spark.conf.set("fs.azure.account.auth.type." + storageAccountName + ".dfs.core.windows.net", "OAuth")
    spark.conf.set("fs.azure.account.oauth.provider.type." + storageAccountName + ".dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
    spark.conf.set("fs.azure.account.oauth2.client.id." + storageAccountName + ".dfs.core.windows.net", "" + appID + "")
    spark.conf.set("fs.azure.account.oauth2.client.secret." + storageAccountName + ".dfs.core.windows.net", "" + secret + "")
    spark.conf.set("fs.azure.account.oauth2.client.endpoint." + storageAccountName + ".dfs.core.windows.net", "https://login.microsoftonline.com/" + tenantID + "/oauth2/token")
    spark.conf.set("fs.azure.createRemoteFileSystemDuringInitialization", "true")
    dbutils.fs.ls("abfss://" + fileSystemName  + "@" + storageAccountName + ".dfs.core.windows.net/")
    spark.conf.set("fs.azure.createRemoteFileSystemDuringInitialization", "false")
    
  6. I det här kodblocket ersätter du platshållarvärdena <app-id>, <secret>, <tenant-id> och <storage-account-name> i det här kodblocket med de värden som du hämtade när du slutförde förutsättningarna för den här självstudien. Ersätt platshållarvärdet <file-system-name> med det namn som du vill ge filsystemet.

    • <app-id> och <secret> kommer från den app som du registrerade med Active Directory som en del av skapandet av ett tjänsthuvudnamn.

    • <tenant-id> kommer från din prenumeration.

    • <storage-account-name> är namnet på ditt Azure Data Lake Storage Gen2-lagringskonto.

  7. Tryck på SKIFT + RETUR för att köra koden i det här blocket.

Mata in exempeldata i Azure Data Lake Storage Gen2-kontot

Innan du börjar med det här avsnittet måste du slutföra följande krav:

Ange följande kod i en cell i en arbetsbok:

%sh wget -P /tmp https://raw.githubusercontent.com/Azure/usql/master/Examples/Samples/Data/json/radiowebsite/small_radio_json.json

Kör koden genom att trycka på SKIFT + RETUR i cellen.

I en ny cell nedanför denna anger du följande kod, och ersätter värdena inom hakparentes med samma värden som du använde tidigare:

dbutils.fs.cp("file:///tmp/small_radio_json.json", "abfss://" + fileSystemName + "@" + storageAccountName + ".dfs.core.windows.net/")

Kör koden genom att trycka på SKIFT + RETUR i cellen.

Extrahera data från Azure Data Lake Storage Gen2-kontot

  1. Du kan nu läsa in json-exempelfilen som en dataram i Azure Databricks. Klistra in följande kod i en ny cell. Ersätt platshållarna inom hakparentes med dina värden.

    val df = spark.read.json("abfss://" + fileSystemName + "@" + storageAccountName + ".dfs.core.windows.net/small_radio_json.json")
    
  2. Tryck på SKIFT + RETUR för att köra koden i det här blocket.

  3. Kör följande kod om du vill se dataramens innehåll:

    df.show()
    

    Du bör se utdata som liknar följande fragment:

    +---------------------+---------+---------+------+-------------+----------+---------+-------+--------------------+------+--------+-------------+---------+--------------------+------+-------------+------+
    |               artist|     auth|firstName|gender|itemInSession|  lastName|   length|  level|            location|method|    page| registration|sessionId|                song|status|           ts|userId|
    +---------------------+---------+---------+------+-------------+----------+---------+-------+--------------------+------+--------+-------------+---------+--------------------+------+-------------+------+
    | El Arrebato         |Logged In| Annalyse|     F|            2|Montgomery|234.57914| free  |  Killeen-Temple, TX|   PUT|NextSong|1384448062332|     1879|Quiero Quererte Q...|   200|1409318650332|   309|
    | Creedence Clearwa...|Logged In|   Dylann|     M|            9|    Thomas|340.87138| paid  |       Anchorage, AK|   PUT|NextSong|1400723739332|       10|        Born To Move|   200|1409318653332|    11|
    | Gorillaz            |Logged In|     Liam|     M|           11|     Watts|246.17751| paid  |New York-Newark-J...|   PUT|NextSong|1406279422332|     2047|                DARE|   200|1409318685332|   201|
    ...
    ...
    

    Du har nu extraherat data från Azure Data Lake Storage Gen2 till Azure Databricks.

Transformera data med Azure Databricks

Filen small_radio_json.json med exempelrådata fångar målgruppen för en radiostation och har flera olika kolumner. I det här avsnittet ska du transformera data så att endast specifika kolumner hämtas från datamängden.

  1. Börja med att bara hämta kolumnerna firstName, lastName, gender, location och level från den dataram som du skapade.

    val specificColumnsDf = df.select("firstname", "lastname", "gender", "location", "level")
    specificColumnsDf.show()
    

    Du får utdata som liknar följande kodfragment:

    +---------+----------+------+--------------------+-----+
    |firstname|  lastname|gender|            location|level|
    +---------+----------+------+--------------------+-----+
    | Annalyse|Montgomery|     F|  Killeen-Temple, TX| free|
    |   Dylann|    Thomas|     M|       Anchorage, AK| paid|
    |     Liam|     Watts|     M|New York-Newark-J...| paid|
    |     Tess|  Townsend|     F|Nashville-Davidso...| free|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...| free|
    |     Alan|     Morse|     M|Chicago-Napervill...| paid|
    |Gabriella|   Shelton|     F|San Jose-Sunnyval...| free|
    |   Elijah|  Williams|     M|Detroit-Warren-De...| paid|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...| free|
    |     Tess|  Townsend|     F|Nashville-Davidso...| free|
    |     Alan|     Morse|     M|Chicago-Napervill...| paid|
    |     Liam|     Watts|     M|New York-Newark-J...| paid|
    |     Liam|     Watts|     M|New York-Newark-J...| paid|
    |   Dylann|    Thomas|     M|       Anchorage, AK| paid|
    |     Alan|     Morse|     M|Chicago-Napervill...| paid|
    |   Elijah|  Williams|     M|Detroit-Warren-De...| paid|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...| free|
    |     Alan|     Morse|     M|Chicago-Napervill...| paid|
    |   Dylann|    Thomas|     M|       Anchorage, AK| paid|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...| free|
    +---------+----------+------+--------------------+-----+
    
  2. Du kan transformera dessa data ytterligare genom att t.ex. ändra namnet på kolumnen nivå till prenumerationstyp.

    val renamedColumnsDF = specificColumnsDf.withColumnRenamed("level", "subscription_type")
    renamedColumnsDF.show()
    

    Du får utdata som liknar följande kodfragment.

    +---------+----------+------+--------------------+-----------------+
    |firstname|  lastname|gender|            location|subscription_type|
    +---------+----------+------+--------------------+-----------------+
    | Annalyse|Montgomery|     F|  Killeen-Temple, TX|             free|
    |   Dylann|    Thomas|     M|       Anchorage, AK|             paid|
    |     Liam|     Watts|     M|New York-Newark-J...|             paid|
    |     Tess|  Townsend|     F|Nashville-Davidso...|             free|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...|             free|
    |     Alan|     Morse|     M|Chicago-Napervill...|             paid|
    |Gabriella|   Shelton|     F|San Jose-Sunnyval...|             free|
    |   Elijah|  Williams|     M|Detroit-Warren-De...|             paid|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...|             free|
    |     Tess|  Townsend|     F|Nashville-Davidso...|             free|
    |     Alan|     Morse|     M|Chicago-Napervill...|             paid|
    |     Liam|     Watts|     M|New York-Newark-J...|             paid|
    |     Liam|     Watts|     M|New York-Newark-J...|             paid|
    |   Dylann|    Thomas|     M|       Anchorage, AK|             paid|
    |     Alan|     Morse|     M|Chicago-Napervill...|             paid|
    |   Elijah|  Williams|     M|Detroit-Warren-De...|             paid|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...|             free|
    |     Alan|     Morse|     M|Chicago-Napervill...|             paid|
    |   Dylann|    Thomas|     M|       Anchorage, AK|             paid|
    |  Margaux|     Smith|     F|Atlanta-Sandy Spr...|             free|
    +---------+----------+------+--------------------+-----------------+
    

Läsa in data i Azure Synapse

I det här avsnittet laddar du upp transformerade data till Azure Synapse. Du använder Azure Synapse-anslutningsappen för Azure Databricks för att direkt ladda upp en dataram som en tabell i en Synapse Spark-pool.

Som tidigare nämnts använder Azure Synapse-anslutningsappen Azure Blob Storage som tillfällig lagring för att ladda upp data mellan Azure Databricks och Azure Synapse. Så du börjar med att tillhandahålla den konfiguration som ska ansluta till lagringskontot. Du måste redan ha skapat kontot som en del av de nödvändiga förutsättningarna för den här artikeln.

  1. Ange konfigurationen så att du får åtkomst till Azure Storage-kontot från Azure Databricks.

    val blobStorage = "<blob-storage-account-name>.blob.core.windows.net"
    val blobContainer = "<blob-container-name>"
    val blobAccessKey =  "<access-key>"
    
  2. Ange en tillfällig mapp som ska användas när data flyttas mellan Azure Databricks och Azure Synapse.

    val tempDir = "wasbs://" + blobContainer + "@" + blobStorage +"/tempDirs"
    
  3. Kör följande fragment om du vill lagra åtkomstnycklar för Azure Blob Storage i konfigurationen. Den här åtgärden gör att du inte behöver lagra åtkomstnyckeln i anteckningsboken som oformaterad text.

    val acntInfo = "fs.azure.account.key."+ blobStorage
    sc.hadoopConfiguration.set(acntInfo, blobAccessKey)
    
  4. Ange värdena för att ansluta till Azure Synapse-instansen. Du måste ha skapat en Azure Synapse Analytics-tjänst som en förutsättning. Använd det fullständigt kvalificerade servernamnet för dwServer. Exempel: <servername>.database.windows.net

    //Azure Synapse related settings
    val dwDatabase = "<database-name>"
    val dwServer = "<database-server-name>"
    val dwUser = "<user-name>"
    val dwPass = "<password>"
    val dwJdbcPort =  "1433"
    val dwJdbcExtraOptions = "encrypt=true;trustServerCertificate=true;hostNameInCertificate=*.database.windows.net;loginTimeout=30;"
    val sqlDwUrl = "jdbc:sqlserver://" + dwServer + ":" + dwJdbcPort + ";database=" + dwDatabase + ";user=" + dwUser+";password=" + dwPass + ";$dwJdbcExtraOptions"
    val sqlDwUrlSmall = "jdbc:sqlserver://" + dwServer + ":" + dwJdbcPort + ";database=" + dwDatabase + ";user=" + dwUser+";password=" + dwPass
    
  5. Kör följande kodfragment för att läsa in den transformerade dataramen, omdöpt tillColumnsDF, som en tabell i Azure Synapse. Det här kodfragmentet skapar en tabell med namnet SampleTable i SQL-databasen.

    spark.conf.set(
        "spark.sql.parquet.writeLegacyFormat",
        "true")
    
    renamedColumnsDF.write.format("com.databricks.spark.sqldw").option("url", sqlDwUrlSmall).option("dbtable", "SampleTable")       .option( "forward_spark_azure_storage_credentials","True").option("tempdir", tempDir).mode("overwrite").save()
    

    Kommentar

    Det här exemplet använder forward_spark_azure_storage_credentials flaggan, vilket gör att Azure Synapse får åtkomst till data från Blob Storage med hjälp av en åtkomstnyckel. Det här är den enda autentiseringsmetod som stöds.

    Om Azure Blob Storage är begränsat till att välja virtuella nätverk kräver Azure Synapse hanterad tjänstidentitet i stället för åtkomstnycklar. Detta orsakar felet "Den här begäran har inte behörighet att utföra den här åtgärden."

  6. Anslut till SQL-databasen och kontrollera att du ser en databas med namnet SampleTable.

    Verify the sample table

  7. Verifiera tabellens innehåll genom att köra en urvalsfråga. Tabellen bör ha samma data som dataramen renamedColumnsDF.

    Verify the sample table content

Rensa resurser

När du har slutfört självstudien kan du avsluta klustret. Välj Kluster till vänster på Azure Databricks-arbetsytan. Peka på ellipsen (...) under Åtgärder och välj ikonen Avsluta för att avsluta klustret.

Stop a Databricks cluster

Om du inte avslutar klustret manuellt stoppas det automatiskt, förutsatt att du har markerat kryssrutan Avsluta efter __ minuter av inaktivitet när du skapade klustret. I så fall stoppas klustret automatiskt om det har varit inaktivt under den angivna tiden.

Nästa steg

I den här självstudiekursen lärde du dig att:

  • Skapa en Azure Databricks-tjänst
  • Skapa ett Spark-kluster i Azure Databricks
  • Skapa en anteckningsbok i Azure Databricks
  • Extrahera data från ett Data Lake Storage Gen2-konto
  • Transformera data med Azure Databricks
  • Läsa in data i Azure Synapse