Tutorial: Zugreifen auf Daten vom Typ „Data Lake Storage Gen2“ mit Azure Databricks unter Verwendung von SparkTutorial: Access Data Lake Storage Gen2 data with Azure Databricks using Spark

In diesem Tutorial erfahren Sie, wie Sie Ihren Azure Databricks-Cluster mit Daten in einem Azure-Speicherkonto verbinden, für das Azure Data Lake Storage Gen2 aktiviert ist.This tutorial shows you how to connect your Azure Databricks cluster to data stored in an Azure storage account that has Azure Data Lake Storage Gen2 enabled. Diese Verbindung ermöglicht die native Ausführung von Datenabfragen und -analysen über Ihren Cluster.This connection enables you to natively run queries and analytics from your cluster on your data.

In diesem Lernprogramm lernen Sie Folgendes:In this tutorial, you will:

  • Erstellen eines Databricks-ClustersCreate a Databricks cluster
  • Erfassen von unstrukturierten Daten in einem SpeicherkontoIngest unstructured data into a storage account
  • Ausführen von Analysen für Ihre Daten in Blob StorageRun analytics on your data in Blob storage

Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.If you don’t have an Azure subscription, create a free account before you begin.

VoraussetzungenPrerequisites

Herunterladen der FlugdatenDownload the flight data

In diesem Tutorial werden Flugdaten des Bureau of Transportation Statistics verwendet, um die Durchführung eines ETL-Vorgangs zu veranschaulichen.This tutorial uses flight data from the Bureau of Transportation Statistics to demonstrate how to perform an ETL operation. Sie müssen diese Daten zum Durchführen des Tutorials herunterladen.You must download this data to complete the tutorial.

  1. Rufen Sie die Website von Research and Innovative Technology Administration, Bureau of Transportation Statistics (RITA) auf.Go to Research and Innovative Technology Administration, Bureau of Transportation Statistics.

  2. Aktivieren Sie das Kontrollkästchen Prezipped file (ZIP-Datei), um alle Datenfelder auszuwählen.Select the Prezipped File check box to select all data fields.

  3. Wählen Sie die Downloadschaltfläche aus, und speichern Sie die Ergebnisse auf Ihrem Computer .Select the Download button and save the results to your computer.

  4. Entzippen Sie den Inhalt der ZIP-Datei, und notieren Sie sich den Namen und den Pfad der Datei.Unzip the contents of the zipped file and make a note of the file name and the path of the file. Diese Informationen werden in einem späteren Schritt benötigt.You need this information in a later step.

Erstellen eines Azure Databricks-DienstsCreate an Azure Databricks service

In diesem Abschnitt erstellen Sie einen Azure Databricks-Dienst über das Azure-Portal.In this section, you create an Azure Databricks service by using the Azure portal.

  1. Klicken Sie im Azure-Portal auf Ressource erstellen > Analysen > Azure Databricks.In the Azure portal, select Create a resource > Analytics > Azure Databricks.

    Databricks im Azure-PortalDatabricks on Azure portal

  2. Geben Sie unter Azure Databricks-Dienst die folgenden Werte an, um einen Databricks-Dienst zu erstellen:Under Azure Databricks Service, provide the following values to create a Databricks service:

    EigenschaftProperty BESCHREIBUNGDescription
    ArbeitsbereichsnameWorkspace name Geben Sie einen Namen für Ihren Databricks-Arbeitsbereich an.Provide a name for your Databricks workspace.
    AbonnementSubscription Wählen Sie in der Dropdownliste Ihr Azure-Abonnement aus.From the drop-down, select your Azure subscription.
    RessourcengruppeResource group Geben Sie an, ob Sie eine neue Ressourcengruppe erstellen oder eine vorhandene Ressourcengruppe verwenden möchten.Specify whether you want to create a new resource group or use an existing one. Eine Ressourcengruppe ist ein Container, der verwandte Ressourcen für eine Azure-Lösung enthält.A resource group is a container that holds related resources for an Azure solution. Weitere Informationen finden Sie in der Übersicht über den Azure Resource Manager.For more information, see Azure Resource Group overview.
    LocationLocation Wählen Sie USA, Westen 2 aus.Select West US 2. Informationen zu weiteren verfügbaren Regionen finden Sie unter Verfügbare Produkte nach Region.For other available regions, see Azure services available by region.
    TarifPricing Tier Wählen Sie Standard aus.Select Standard.

    Erstellen eines Azure Databricks-ArbeitsbereichsCreate an Azure Databricks workspace

  3. Die Kontoerstellung dauert einige Minuten.The account creation takes a few minutes. Den Status des Vorgangs können Sie anhand der Statusanzeige im oberen Bereich verfolgen.To monitor the operation status, view the progress bar at the top.

  4. Aktivieren Sie das Kontrollkästchen An Dashboard anheften, und klicken Sie anschließend auf Erstellen.Select Pin to dashboard and then select Create.

Erstellen eines Spark-Clusters in Azure DatabricksCreate a Spark cluster in Azure Databricks

  1. Navigieren Sie im Azure-Portal zu dem erstellten Databricks-Dienst, und wählen Sie Launch Workspace (Arbeitsbereich starten) aus.In the Azure portal, go to the Databricks service that you created, and select Launch Workspace.

  2. Sie werden zum Azure Databricks-Portal weitergeleitet.You're redirected to the Azure Databricks portal. Klicken Sie im Portal auf Cluster.From the portal, select Cluster.

    Databricks in AzureDatabricks on Azure

  3. Geben Sie auf der Seite Neuer Cluster die erforderlichen Werte an, um einen Cluster zu erstellen.In the New cluster page, provide the values to create a cluster.

    Erstellen eines Databricks-Spark-Clusters in AzureCreate Databricks Spark cluster on Azure

  4. Geben Sie Werte für die folgenden Felder an, und übernehmen Sie bei den anderen Feldern die Standardwerte:Fill in values for the following fields, and accept the default values for the other fields:

    • Geben Sie einen Namen für den Cluster ein.Enter a name for the cluster.

    • Erstellen Sie für diesen Artikel einen Cluster mit der Runtime 5.1.For this article, create a cluster with the 5.1 runtime.

    • Aktivieren Sie das Kontrollkästchen Terminate after __ minutes of inactivity (Nach __ Minuten Inaktivität beenden).Make sure you select the Terminate after __ minutes of inactivity check box. Falls der Cluster nicht verwendet wird, geben Sie an, nach wie vielen Minuten er beendet werden soll.If the cluster isn't being used, provide a duration (in minutes) to terminate the cluster.

    • Klicken Sie auf Cluster erstellen.Select Create cluster. Wenn der Cluster ausgeführt wird, können Sie Notebooks an den Cluster anfügen und Spark-Aufträge ausführen.After the cluster is running, you can attach notebooks to the cluster and run Spark jobs.

Erfassen von DatenIngest data

Kopieren von Quelldaten in das SpeicherkontoCopy source data into the storage account

Kopieren Sie mithilfe von AzCopy Daten aus Ihrer CSV-Datei in Ihr Data Lake Storage Gen2-Konto.Use AzCopy to copy data from your .csv file into your Data Lake Storage Gen2 account.

  1. Öffnen Sie ein Eingabeaufforderungsfenster, und geben Sie den folgenden Befehl ein, um sich bei Ihrem Speicherkonto anzumelden:Open a command prompt window, and enter the following command to log into your storage account.

    azcopy login
    

    Folgen Sie den Anweisungen im Eingabeaufforderungsfenster, um Ihr Benutzerkonto zu authentifizieren.Follow the instructions that appear in the command prompt window to authenticate your user account.

  2. Geben Sie den folgenden Befehl ein, um Daten aus der CSV-Datei zu kopieren:To copy data from the .csv account, enter the following command.

    azcopy cp "<csv-folder-path>" https://<storage-account-name>.dfs.core.windows.net/<file-system-name>/folder1/On_Time.csv
    
    • Ersetzen Sie den Platzhalterwert <csv-folder-path> durch den Pfad zu der CSV-Datei.Replace the <csv-folder-path> placeholder value with the path to the .csv file.

    • Ersetzen Sie den Platzhalterwert <storage-account-name> durch den Namen Ihres Speicherkontos.Replace the <storage-account-name> placeholder value with the name of your storage account.

    • Ersetzen Sie den Platzhalter <file-system-name> durch einen beliebigen Namen für Ihr Dateisystem.Replace the <file-system-name> placeholder with any name that you want to give your file system.

Erstellen und Einbinden eines DateisystemsCreate a file system and mount it

In diesem Abschnitt erstellen Sie ein Dateisystem und einen Ordner in Ihrem Speicherkonto.In this section, you'll create a file system and a folder in your storage account.

  1. Navigieren Sie im Azure-Portal zu dem erstellten Azure Databricks-Dienst, und wählen Sie Launch Workspace (Arbeitsbereich starten) aus.In the Azure portal, go to the Azure Databricks service that you created, and select Launch Workspace.

  2. Wählen Sie im linken Bereich die Option Arbeitsbereich aus.On the left, select Workspace. Wählen Sie in der Dropdownliste Arbeitsbereich die Option Erstellen > Notebook aus.From the Workspace drop-down, select Create > Notebook.

    Erstellen eines Notebooks in DatabricksCreate a notebook in Databricks

  3. Geben Sie im Dialogfeld Notizbuch erstellen einen Namen für das Notebook ein.In the Create Notebook dialog box, enter a name for the notebook. Wählen Sie Python als Sprache und anschließend den zuvor erstellten Spark-Cluster aus.Select Python as the language, and then select the Spark cluster that you created earlier.

  4. Klicken Sie auf Erstellen.Select Create.

  5. Kopieren Sie den folgenden Codeblock, und fügen Sie ihn in die erste Zelle ein, führen Sie den Code jedoch noch nicht aus.Copy and paste the following code block into the first cell, but don't run this code yet.

    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": "<password>",
           "fs.azure.account.oauth2.client.endpoint": "https://login.microsoftonline.com/<tenant>/oauth2/token",
           "fs.azure.createRemoteFileSystemDuringInitialization": "true"}
    
    dbutils.fs.mount(
    source = "abfss://<file-system-name>@<storage-account-name>.dfs.core.windows.net/folder1",
    mount_point = "/mnt/flightdata",
    extra_configs = configs)
    
  6. Ersetzen Sie in diesem Codeblock die Platzhalterwerte appId, password, tenant und storage-account-name durch die Werte, die Sie bei der Vorbereitung dieses Tutorials gesammelt haben.In this code block, replace the appId, password, tenant, and storage-account-name placeholder values in this code block with the values that you collected while completing the prerequisites of this tutorial. Ersetzen Sie den Platzhalterwert file-system-name durch den Namen, den Sie dem Azure Data Lake Storage-Dateisystem im vorherigen Schritt gegeben haben.Replace the file-system-name placeholder value with the name that you gave to the ADLS File System on the previous step.

Verwenden Sie die nachstehenden Werte zum Ersetzen der genannten Platzhalter.Use these values to replace the mentioned placeholders.

  • appId und password stammen aus der App, die Sie im Rahmen der Dienstprinzipalerstellung bei Active Directory registriert haben.The appId, and password are from the app that you registered with active directory as part of creating a service principal.

  • tenant-id stammt aus Ihrem Abonnement.The tenant-id is from your subscription.

  • storage-account-name ist der Name Ihres Azure Data Lake Storage Gen2-Speicherkontos.The storage-account-name is the name of your Azure Data Lake Storage Gen2 storage account.

  • Ersetzen Sie den Platzhalter file-system-name durch einen beliebigen Namen für Ihr Dateisystem.Replace the file-system-name placeholder with any name that you want to give your file system.

Hinweis

In einer Produktionsumgebung empfiehlt es sich, Ihr Kennwort in Azure Databricks zu speichern.In a production setting, consider storing your password in Azure Databricks. Fügen Sie dem Codeblock dann einen Suchschlüssel anstelle des Kennworts hinzu.Then, add a look up key to your code block instead of the password. Sehen Sie sich nach Abschluss dieses Schnellstarts die Beispiele für diesen Ansatz im Artikel Azure Data Lake Storage Gen2 auf der Azure Databricks-Website an.After you've completed this quickstart, see the Azure Data Lake Storage Gen2 article on the Azure Databricks Website to see examples of this approach.

  1. Drücken Sie UMSCHALT+EINGABE, um den Code in diesem Block auszuführen.Press the SHIFT + ENTER keys to run the code in this block.

Lassen Sie dieses Notebook geöffnet, da Sie ihm später Befehle hinzufügen.Keep this notebook open as you will add commands to it later.

Verwenden des Databricks-Notebooks zum Konvertieren von CSV in ParquetUse Databricks Notebook to convert CSV to Parquet

Fügen Sie dem zuvor erstellten Notebook eine neue Zelle hinzu, und fügen Sie in diese Zelle den folgenden Code ein.In the notebook that you previously created, add a new cell, and paste the following code into that cell.

# 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")

Erkunden von DatenExplore data

Fügen Sie in einer neuen Zelle den folgenden Code ein, um eine Liste mit CSV-Dateien abzurufen, die per AzCopy hochgeladen wurden.In a new cell, paste the following code to get a list of CSV files uploaded via AzCopy.

import os.path
import IPython
from pyspark.sql import SQLContext
display(dbutils.fs.ls("/mnt/flightdata"))

Führen Sie dieses Skript aus, um eine neue Datei zu erstellen und die Dateien im Ordner parquet/flights aufzulisten:To create a new file and list files in the parquet/flights folder, run this script:

dbutils.fs.put("/mnt/flightdata/1.txt", "Hello, World!", True)
dbutils.fs.ls("/mnt/flightdata/parquet/flights")

Anhand dieser Codebeispiele haben Sie die hierarchische Struktur von HDFS unter Verwendung von Daten untersucht, die in einem Speicherkonto gespeichert sind, für das Azure Data Lake Storage Gen2 aktiviert ist.With these code samples, you have explored the hierarchical nature of HDFS using data stored in a storage account with Data Lake Storage Gen2 enabled.

Abfragen von DatenQuery the data

Als Nächstes können Sie damit beginnen, die Daten abzufragen, die Sie in Ihr Speicherkonto hochgeladen haben.Next, you can begin to query the data you uploaded into your storage account. Geben Sie die folgenden Codeblöcke unter Cmd 1 ein, und drücken Sie CMD+EINGABE, um das Python-Skript auszuführen.Enter each of the following code blocks into Cmd 1 and press Cmd + Enter to run the Python script.

Führen Sie das folgende Skript aus, um Dataframes für Ihre Datenquellen zu erstellen:To create data frames for your data sources, run the following script:

  • Ersetzen Sie den Platzhalterwert <csv-folder-path> durch den Pfad zu der CSV-Datei.Replace the <csv-folder-path> placeholder value with the path to the .csv file.
#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)

Geben Sie das folgende Skript ein, um einige grundlegende Analyseabfragen für die Daten auszuführen:Enter this script to run some basic analysis queries against the 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))

Bereinigen von RessourcenClean up resources

Löschen Sie die Ressourcengruppe und alle dazugehörigen Ressourcen, wenn Sie sie nicht mehr benötigen.When they're no longer needed, delete the resource group and all related resources. Wählen Sie hierzu die Ressourcengruppe für das Speicherkonto und anschließend Löschen aus.To do so, select the resource group for the storage account and select Delete.

Nächste SchritteNext steps