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
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:
Skapa en Azure Synapse, skapa en brandväggsregel på servernivå och anslut till servern som serveradministratör. Se Snabbstart: Skapa och fråga en Synapse SQL pool med hjälp av Azure Portal.
Skapa en huvudnyckel för Azure Synapse. Se Skapa en databashuvudnyckel.
Skapa ett Azure Blob Storage-konto och en container i det. Få dessutom åtkomst till lagringskontot genom att hämta åtkomstnyckeln. Se Snabbstart: Upload, ladda ned och lista blobar med Azure Portal.
Skapa ett Azure Data Lake Storage Gen2-lagringskonto. Se Snabbstart: Skapa ett Azure Data Lake Storage Gen2-lagringskonto.
Skapa ett huvudnamn för tjänsten. Se Gör så här: Använd portalen för att skapa ett Azure AD-program och tjänstens huvudnamn som har åtkomst till resurser.
Det finns några saker som du måste göra när du utför stegen i den här artikeln.
När du utför stegen i avsnittet Tilldela programmet till en roll i artikeln måste du tilldela rollen Storage Blob Data-deltagare till tjänstens huvudnamn i omfånget för Data Lake Storage Gen2-kontot. Om du tilldelar rollen till den överordnade resursgruppen eller prenumerationen får du behörighetsrelaterade fel tills rolltilldelningarna sprids till lagringskontot.
Om du föredrar att använda en åtkomstkontrollista (ACL) för att associera tjänstens huvudnamn med en specifik fil eller katalog, refererar du till Åtkomstkontroll i Azure Data Lake Storage Gen2.
När du utför stegen i avsnittet Hämta värden för inloggning i artikeln klistrar du in klientorganisations-ID, app-ID och hemliga värden i en textfil.
Logga in på Azure-portalen.
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.
I menyn i Azure-portalen väljer du Skapa en resurs.

Välj sedan AnalyticsAzure Databricks.

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. Det tar några minuter att skapa kontot. Du kan övervaka åtgärdsstatusen i förloppsindikatorn längst upp.
Välj Fäst på instrumentpanelen och välj sedan Skapa.
Skapa ett Spark-kluster i Azure Databricks
Gå till Databricks-tjänsten du skapade i Azure Portal och välj Starta arbetsyta.
Du omdirigeras till Azure Databricks-portalen. I portalen väljer du Kluster.

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

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
Gå till Azure Databricks-tjänsten du skapade i Azure Portal och välj Starta arbetsyta.
Välj Arbetsyta till vänster. I listrutan Arbetsyta väljer du SkapaAnteckningsbok.

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.

Välj Skapa.
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")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.
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
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")Tryck på SKIFT + RETUR för att köra koden i det här blocket.
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.
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| +---------+----------+------+--------------------+-----+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.
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>"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"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)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=" + dwPassKö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_credentialsflaggan , 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".
Anslut till SQL-databasen och kontrollera att du ser en databas med namnet SampleTable.

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

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.

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.