Självstudie: Azure Data Lake Storage Gen2, Azure Databricks & Spark
Den här självstudien visar hur du ansluter ditt Azure Databricks-kluster till data som lagras i ett Azure-lagringskonto som har Azure Data Lake Storage Gen2 aktiverat. Med den här anslutningen kan du internt köra frågor och analyser från klustret på dina data.
I de här självstudierna får du:
- Skapa ett Databricks-kluster
- Mata in ostrukturerade data i ett lagringskonto
- Köra analyser på data i Blob Storage
Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Förutsättningar
Skapa ett Azure Data Lake Storage Gen2-konto.
Se Skapa ett lagringskonto som ska användas med Azure Data Lake Storage Gen2.
Se till att ditt användarkonto har tilldelats rollen Storage Blob Data-deltagare.
Installera AzCopy v10. Läs mer i Överföra data med AzCopy v10
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 kan komma åt 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.
Viktigt
Se till att tilldela rollen i omfånget för Data Lake Storage Gen2-lagringskontot. Du kan tilldela en roll till den överordnade resursgruppen eller prenumerationen, men du får behörighetsrelaterade fel tills de rolltilldelningarna propageras till lagringskontot.
✔️ När du utför stegen i avsnittet Hämta värden för inloggning i artikeln klistrar du in klient-ID, app-ID och klienthemlighetsvärden i en textfil. Du kommer att behöva dem snart.
Ladda ned flygdata
I den här självstudien används flygdata från Bureau of Transportation Statistics för att demonstrera hur du utför en ETL-åtgärd. Du måste hämta dessa data för att kunna gå självstudien.
Gå till Research and Innovative Technology Administration, Bureau of Transportation Statistics.
Markera kryssrutan Prezipped file (Förkomprimerad fil) för att markera alla datafält.
Klicka på knappen Ladda ned och spara resultaten lokalt.
Packa upp innehållet i den komprimerade filen och anteckna filnamnet och sökvägen. Du behöver den här informationen i ett senare steg.
Skapa en Azure Databricks-tjänst
I det här avsnittet skapar du en Azure Databricks-tjänst i Azure Portal.
I den Azure Portal väljer du Skapa en resurs > Analytics > Azure 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 120 minuters inaktivitet. Ange en varaktighet (i minuter) för att avsluta klustret om klustret inte används.
Välj Skapa kluster. När klustret körs kan du ansluta anteckningsböcker till klustret och köra Spark-jobb.
Mata in data
Kopiera källdata till lagringskontot
Använd AzCopy till att kopiera data från .csv-filen till Data Lake Storage Gen2-kontot.
Öppna en kommandotolk och ange följande kommandon för att logga in på lagringskontot.
azcopy loginFölj anvisningarna som visas i kommandotolken för att autentisera ditt användarkonto.
Kopiera data från .csv-filen med följande kommando.
azcopy cp "<csv-folder-path>" https://<storage-account-name>.dfs.core.windows.net/<container-name>/folder1/On_Time.csvErsätt
<csv-folder-path>platshållarvärdet med sökvägen till .csv filen.Ersätt platshållarvärdet
<storage-account-name>med namnet på ditt lagringskonto.Ersätt
<container-name>platshållaren med namnet på en container i ditt lagringskonto.
Skapa en container och montera den
I det här avsnittet skapar du en container och en mapp i ditt lagringskonto.
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 Skapa > Anteckningsbok.

Ge anteckningsboken ett namn i dialogrutan Skapa anteckningsbok. Välj Python som språk och välj sedan det Spark-kluster du skapade tidigare.
Välj Skapa.
Kopiera och klistra in följande kodblock i den första cellen, men kör inte den här koden än.
configs = {"fs.azure.account.auth.type": "OAuth", "fs.azure.account.oauth.provider.type": "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider", "fs.azure.account.oauth2.client.id": "<appId>", "fs.azure.account.oauth2.client.secret": "<clientSecret>", "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<tenant>/oauth2/token", "fs.azure.createRemoteFileSystemDuringInitialization": "true"} dbutils.fs.mount( source = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/folder1", mount_point = "/mnt/flightdata", extra_configs = configs)I det här kodblocket ersätter du platshållarvärdena
appId,clientSecret,tenantochstorage-account-namei 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ättcontainer-nameplatshållarvärdet med namnet på containern.Tryck på SKIFT + RETUR för att köra koden i det här blocket.
Lämna den här anteckningsboken öppen eftersom du ska lägga till kommandon i den senare.
Använda Databricks-anteckningsboken för att konvertera CSV till Parquet
Lägg till en ny cell i anteckningsboken du skapade tidigare och klistra in följande kod i cellen.
# Use the previously established DBFS mount point to read the data.
# create a data frame to read data.
flightDF = spark.read.format('csv').options(
header='true', inferschema='true').load("/mnt/flightdata/*.csv")
# read the airline csv file and write the output to parquet format for easy query.
flightDF.write.mode("append").parquet("/mnt/flightdata/parquet/flights")
print("Done")
Utforska data
Klistra in följande kod i en ny cell för att få en lista med CSV-filer som laddats upp via AzCopy.
import os.path
import IPython
from pyspark.sql import SQLContext
display(dbutils.fs.ls("/mnt/flightdata"))
Kör det här skriptet om du vill skapa en ny fil och visa en lista med filerna i mappen parquet/flights:
dbutils.fs.put("/mnt/flightdata/1.txt", "Hello, World!", True)
dbutils.fs.ls("/mnt/flightdata/parquet/flights")
Med dessa kodexempel har du utforskat den hierarkiska strukturen för HDFS med hjälp av data som lagras i ett lagringskonto med Azure Data Lake Storage Gen2 aktiverat.
Fråga efter data
Därefter kan du börja fråga efter de data du har laddat upp till ditt lagringskonto. Ange vart och ett av följande kodblock i Cmd 1 och tryck på Cmd + Retur för att köra Python-skriptet.
Skapa dataramar för dina datakällor med följande skript:
- Ersätt
<csv-folder-path>platshållarvärdet med sökvägen till .csvfilen.
# Copy this into a Cmd cell in your notebook.
acDF = spark.read.format('csv').options(
header='true', inferschema='true').load("/mnt/flightdata/On_Time.csv")
acDF.write.parquet('/mnt/flightdata/parquet/airlinecodes')
# read the existing parquet file for the flights database that was created earlier
flightDF = spark.read.format('parquet').options(
header='true', inferschema='true').load("/mnt/flightdata/parquet/flights")
# print the schema of the dataframes
acDF.printSchema()
flightDF.printSchema()
# print the flight database size
print("Number of flights in the database: ", flightDF.count())
# show the first 20 rows (20 is the default)
# to show the first n rows, run: df.show(n)
acDF.show(100, False)
flightDF.show(20, False)
# Display to run visualizations
# preferably run this in a separate cmd cell
display(flightDF)
Med det här skriptet kör du några grundläggande analysfrågor mot data.
# Run each of these queries, preferably in a separate cmd cell for separate analysis
# create a temporary sql view for querying flight information
FlightTable = spark.read.parquet('/mnt/flightdata/parquet/flights')
FlightTable.createOrReplaceTempView('FlightTable')
# create a temporary sql view for querying airline code information
AirlineCodes = spark.read.parquet('/mnt/flightdata/parquet/airlinecodes')
AirlineCodes.createOrReplaceTempView('AirlineCodes')
# using spark sql, query the parquet file to return total flights in January and February 2016
out1 = spark.sql("SELECT * FROM FlightTable WHERE Month=1 and Year= 2016")
NumJan2016Flights = out1.count()
out2 = spark.sql("SELECT * FROM FlightTable WHERE Month=2 and Year= 2016")
NumFeb2016Flights = out2.count()
print("Jan 2016: ", NumJan2016Flights, " Feb 2016: ", NumFeb2016Flights)
Total = NumJan2016Flights+NumFeb2016Flights
print("Total flights combined: ", Total)
# List out all the airports in Texas
out = spark.sql(
"SELECT distinct(OriginCityName) FROM FlightTable where OriginStateName = 'Texas'")
print('Airports in Texas: ', out.show(100))
# find all airlines that fly from Texas
out1 = spark.sql(
"SELECT distinct(Reporting_Airline) FROM FlightTable WHERE OriginStateName='Texas'")
print('Airlines that fly to/from Texas: ', out1.show(100, False))
Rensa resurser
Ta bort resursgruppen och alla relaterade resurser när de inte längre behövs. Det gör du genom att välja resursgruppen för lagringskontot och sedan Ta bort.