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 transformationer av data i Azure Databricks och läser in transformerade data till Azure Synapse Analytics.

Stegen i den här självstudien använder Azure Synapse för att Azure Databricks ö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 med Data Lake Store och Azure SynapseAzure Databricks med Data Lake Store och

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 kan du skapa ett kostnadsfritt konto innan du börjar.

Anteckning

Den här självstudien kan inte utföras med en kostnadsfri utvärderingsprenumeration på Azure. Om du har ett kostnadsfritt konto går du till din profil och ändrar prenumerationen till Betala per du-go. Mer information finns i Kostnadsfritt Azure-konto. Ta sedan bort utgiftsgränsen ochbegär en kvotökning för vCPUs i din region. När du skapar din Azure Databricks-arbetsyta kan du välja prisnivån Utvärderingsversion (Premium–14-dagars kostnadsfria DBPU:er) för att ge arbetsytan åtkomst till kostnadsfria Premium Azure Databricks DBPu:er 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.

✔️ Prenumerationens klientorganisations-ID.

✔️ Program-ID:t för den app som du registrerade med Azure Active Directory (Azure AD).

✔️ Autentiseringsnyckeln för den app som du registrerade med Azure AD.

Skapa en Azure Databricks-tjänst

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

  1. I menyn i Azure-portalen väljer du Skapa en resurs.

    Skapa en resurs på Azure Portal

    Välj sedan AnalyticsAzure Databricks.

    Skapa Azure Databricks på Azure Portal

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

    Egenskap Beskrivning
    Namn på arbetsyta Ange ett namn för Databricks-arbetsytan.
    Prenumeration 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 på Azure

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

    Skapa Databricks Spark-kluster i 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.

    • Se till att markera kryssrutan Avsluta efter __ minuters 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 SkapaAnteckningsbok.

    Skapa en notebook-dator i 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.

    Ange information för en notebook-dator i Databricks Ange

  4. Välj Skapa.

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

    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 kan använda Azure Synapse för Azure Databricks att ladda upp en dataram direkt som en tabell i en Synapse Spark-pool.

Som tidigare nämnts använder Azure Synapse 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ärden 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. Till 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 renamedColumnsDFsom 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()
    

    Anteckning

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

    Om din Azure Blob Storage är begränsad till att välja virtuella nätverk Azure Synapse hanterad tjänstidentitet i stället för åtkomstnycklar. Detta leder till 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.

    Verifiera exempeltabellen Verifiera

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

    Verifiera exempeltabellinnehållet Verifiera

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.

Stoppa ett Databricks-kluster Stoppa

Om du inte avslutar klustret manuellt stoppas det automatiskt, förutsatt att du markerade kryssrutan Avsluta efter __ minuters 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

Gå vidare till nästa självstudiekurs och lär dig mer om att strömma realtidsdata i Azure Databricks med Azure Event Hubs.