Samouczek: Uzyskiwanie dostępu do danych usługi Access Data Lake Storage Gen2 za pomocą usługi Azure DataBricks i platformy SparkTutorial: Access Data Lake Storage Gen2 data with Azure Databricks using Spark

W tym samouczku pokazano, jak połączyć klaster usługi Azure Databricks z danymi przechowywanymi na koncie magazynu platformy Azure z włączoną usługą Azure Data Lake Storage Gen2.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. Takie połączenie umożliwia natywne wykonywanie w klastrze zapytań i analiz dotyczących tych danych.This connection enables you to natively run queries and analytics from your cluster on your data.

W tym samouczku wykonasz następujące czynności:In this tutorial, you will:

  • Tworzenie klastra usługi DatabricksCreate a Databricks cluster
  • Pozyskiwanie danych bez struktury na koncie magazynuIngest unstructured data into a storage account
  • Uruchamianie analiz dotyczących danych w magazynie obiektów blobRun analytics on your data in Blob storage

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.If you don’t have an Azure subscription, create a free account before you begin.

Wymagania wstępnePrerequisites

Pobieranie danych lotówDownload the flight data

W tym samouczku w celu zademonstrowania sposobu wykonywania operacji ETL są używane dane dotyczące lotów opracowane przez agencję Bureau of Transportation Statistics.This tutorial uses flight data from the Bureau of Transportation Statistics to demonstrate how to perform an ETL operation. Aby ukończyć samouczek, musisz pobrać te dane.You must download this data to complete the tutorial.

  1. Przejdź do strony Research and Innovative Technology Administration, Bureau of Transportation Statistics.Go to Research and Innovative Technology Administration, Bureau of Transportation Statistics.

  2. Zaznacz pole wyboru Prezipped file (Wstępnie spakowany plik), aby zaznaczyć wszystkie pola danych.Select the Prezipped File check box to select all data fields.

  3. Wybierz przycisk Download (Pobierz) i zapisz wyniki na swoim komputerze.Select the Download button and save the results to your computer.

  4. Rozpakuj zawartość pliku zip i zanotuj nazwę pliku oraz jego ścieżkę.Unzip the contents of the zipped file and make a note of the file name and the path of the file. Te informacje będą potrzebne w późniejszym kroku.You need this information in a later step.

Tworzenie usługi Azure DatabricksCreate an Azure Databricks service

W tej sekcji utworzysz usługę Azure Databricks przy użyciu witryny Azure Portal.In this section, you create an Azure Databricks service by using the Azure portal.

  1. W witrynie Azure Portal wybierz pozycję Utwórz zasób > Analiza > Azure Databricks.In the Azure portal, select Create a resource > Analytics > Azure Databricks.

    Usługa Databricks w witrynie Azure PortalDatabricks on Azure portal

  2. W obszarze Usługa Azure Databricks podaj następujące wartości, aby utworzyć usługę Databricks:Under Azure Databricks Service, provide the following values to create a Databricks service:

    WłaściwośćProperty OpisDescription
    Nazwa obszaru roboczegoWorkspace name Podaj nazwę obszaru roboczego usługi Databricks.Provide a name for your Databricks workspace.
    SubskrypcjaSubscription Z listy rozwijanej wybierz subskrypcję platformy Azure.From the drop-down, select your Azure subscription.
    Grupa zasobówResource group Określ, czy chcesz utworzyć nową grupę zasobów, czy użyć istniejącej grupy.Specify whether you want to create a new resource group or use an existing one. Grupa zasobów to kontener, który zawiera powiązane zasoby dla rozwiązania platformy Azure.A resource group is a container that holds related resources for an Azure solution. Aby uzyskać więcej informacji, zobacz Omówienie usługi Azure Resource Manager.For more information, see Azure Resource Group overview.
    LokalizacjaLocation Wybierz pozycję Zachodnie stany USA 2.Select West US 2. Inne dostępne regiony podano na stronie dostępności usług platformy Azure według regionów.For other available regions, see Azure services available by region.
    Warstwa cenowaPricing Tier Wybierz opcję Standardowa.Select Standard.

    Tworzenie obszaru roboczego usługi Azure DatabricksCreate an Azure Databricks workspace

  3. Tworzenie konta potrwa kilka minut.The account creation takes a few minutes. Stan operacji można monitorować za pomocą paska postępu znajdującego się u góry.To monitor the operation status, view the progress bar at the top.

  4. Wybierz pozycję Przypnij do pulpitu nawigacyjnego, a następnie pozycję Utwórz.Select Pin to dashboard and then select Create.

Tworzenie klastra Spark w usłudze Azure DatabricksCreate a Spark cluster in Azure Databricks

  1. W witrynie Azure Portal przejdź do utworzonej usługi Databricks i wybierz pozycję Uruchom obszar roboczy.In the Azure portal, go to the Databricks service that you created, and select Launch Workspace.

  2. Nastąpi przekierowanie do portalu usługi Azure Databricks.You're redirected to the Azure Databricks portal. W portalu wybierz pozycję Klaster.From the portal, select Cluster.

    Usługa Databricks na platformie AzureDatabricks on Azure

  3. Na stronie Nowy klaster podaj wartości, aby utworzyć klaster.In the New cluster page, provide the values to create a cluster.

    Tworzenie klastra Spark usługi Databricks na platformie AzureCreate Databricks Spark cluster on Azure

  4. Uzupełnij wartości następujących pól i zaakceptuj wartości domyślne w pozostałych polach:Fill in values for the following fields, and accept the default values for the other fields:

    • Wprowadź nazwę klastra.Enter a name for the cluster.

    • Na potrzeby tego artykułu utwórz klaster ze środowiskiem uruchomieniowym w wersji 5.1.For this article, create a cluster with the 5.1 runtime.

    • Upewnij się, że jest zaznaczone pole wyboru Zakończ po __ min nieaktywności.Make sure you select the Terminate after __ minutes of inactivity check box. Podaj czas (w minutach), po jakim działanie klastra ma zostać zakończone, jeśli nie jest on używany.If the cluster isn't being used, provide a duration (in minutes) to terminate the cluster.

    • Wybierz pozycję Utwórz klaster.Select Create cluster. Po uruchomieniu klastra możesz dołączać do niego notesy i uruchamiać zadania Spark.After the cluster is running, you can attach notebooks to the cluster and run Spark jobs.

Pozyskiwanie danychIngest data

Kopiowanie danych źródłowych na konto magazynuCopy source data into the storage account

Korzystanie z narzędzia AzCopy do kopiowania danych z pliku csv na konto usługi Data Lake Storage Gen2.Use AzCopy to copy data from your .csv file into your Data Lake Storage Gen2 account.

  1. Otwórz okno wiersza polecenia, a następnie wprowadź następujące polecenie, aby zalogować się na swoje konto magazynu.Open a command prompt window, and enter the following command to log into your storage account.

    azcopy login
    

    Postępuj zgodnie z instrukcjami, które pojawiają się w oknie wiersza polecenia w celu uwierzytelnienia konta użytkownika.Follow the instructions that appear in the command prompt window to authenticate your user account.

  2. Aby skopiować dane z pliku csv, wprowadź następujące polecenie.To copy data from the .csv account, enter the following command.

    azcopy cp "<csv-folder-path>" https://<storage-account-name>.dfs.core.windows.net/<container-name>/folder1/On_Time.csv
    
    • Zastąp wartość symboluzastępczegościeżkądopliku<csv-folder-path> CSV.Replace the <csv-folder-path> placeholder value with the path to the .csv file.

    • Zastąp wartość symbolu zastępczego <storage-account-name> nazwą konta magazynu.Replace the <storage-account-name> placeholder value with the name of your storage account.

    • Zastąp <container-name> symbol zastępczy dowolną nazwą, którą chcesz przypisać do kontenera.Replace the <container-name> placeholder with any name that you want to give your container.

Utwórz kontener i zainstaluj goCreate a container and mount it

W tej sekcji utworzysz kontener i folder na koncie magazynu.In this section, you'll create a container and a folder in your storage account.

  1. W witrynie Azure Portal przejdź do utworzonej usługi Azure Databricks i wybierz pozycję Uruchom obszar roboczy.In the Azure portal, go to the Azure Databricks service that you created, and select Launch Workspace.

  2. Po lewej stronie wybierz pozycję Obszar roboczy.On the left, select Workspace. Z listy rozwijanej Obszar roboczy wybierz pozycję Utwórz > Notes.From the Workspace drop-down, select Create > Notebook.

    Tworzenie notesu w usłudze DatabricksCreate a notebook in Databricks

  3. W oknie dialogowymTworzenie notesu wprowadź nazwę notesu.In the Create Notebook dialog box, enter a name for the notebook. Jako język wybierz pozycję Python, a następnie wybierz utworzony wcześniej klaster Spark.Select Python as the language, and then select the Spark cluster that you created earlier.

  4. Wybierz pozycję Utwórz.Select Create.

  5. Skopiuj i wklej następujący blok kodu do pierwszej komórki, ale jeszcze nie uruchamiaj kodu.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://<container-name>@<storage-account-name>.dfs.core.windows.net/folder1",
    mount_point = "/mnt/flightdata",
    extra_configs = configs)
    
  6. W tym bloku kodu zamień symbole zastępcze appId, password, tenant i storage-account-name na wartości zebrane podczas wykonywania kroków wymagań wstępnych.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. Zastąp container-name wartość symbolu zastępczego nazwą przedaną do kontenera w poprzednim kroku.Replace the container-name placeholder value with the name that you gave to the container on the previous step.

Użyj tych wartości, aby zastąpić wymienione symbole zastępcze.Use these values to replace the mentioned placeholders.

  • Parametry appId i password pochodzą z aplikacji zarejestrowanej w usłudze Active Directory podczas tworzenia jednostki usługi.The appId, and password are from the app that you registered with active directory as part of creating a service principal.

  • Parametr tenant-id pochodzi z subskrypcji.The tenant-id is from your subscription.

  • Parametr storage-account-name to nazwa konta magazynu usługi Azure Data Lake Storage Gen2.The storage-account-name is the name of your Azure Data Lake Storage Gen2 storage account.

  • Zastąp container-name symbol zastępczy dowolną nazwą, którą chcesz przypisać do kontenera.Replace the container-name placeholder with any name that you want to give your container.

Uwaga

W ustawieniach produkcyjnych Rozważ przechowywanie hasła w Azure Databricks.In a production setting, consider storing your password in Azure Databricks. Następnie Dodaj klucz wyszukiwania do bloku kodu zamiast hasła.Then, add a look up key to your code block instead of the password. Po zakończeniu tego samouczka Szybki start zobacz artykuł na temat usługi Azure Data Lake Storage Gen2 w witrynie internetowej usługi Azure Databricks, aby zapoznać się z przykładami tego podejścia.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. Naciśnij klawisze SHIFT+ENTER, aby uruchomić kod w tym bloku.Press the SHIFT + ENTER keys to run the code in this block.

Nie zamykaj tego notesu, ponieważ później będziesz jeszcze dodawać do niego polecenia.Keep this notebook open as you will add commands to it later.

Konwertowanie formatu CSV na format Parquet za pomocą notesu usługi DatabricksUse Databricks Notebook to convert CSV to Parquet

We wcześniej utworzonym notesie dodaj nową komórkę i wklej do niej następujący kod.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")

Eksplorowanie danychExplore data

W nowej komórce wklej następujący kod, aby uzyskać listę plików CSV przekazanych za pomocą narzędzia AzCopy.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"))

Aby utworzyć nowy plik i uzyskać listę plików w folderze parquet/flights, uruchom następujący skrypt: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")

Przy użyciu tego przykładowego kodu możesz eksplorować hierarchię systemu plików HDFS na przykładzie danych przechowywanych na koncie magazynu z włączoną usługą Azure Data Lake Storage Gen2.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.

Wykonywanie zapytań na danychQuery the data

Następnie możesz rozpocząć wykonywanie zapytań dotyczących danych przekazanych na swoje konto magazynu.Next, you can begin to query the data you uploaded into your storage account. Wprowadź każdy z poniższych bloków kodu w komórce Cmd 1 i naciśnij klawisze Cmd + Enter, aby uruchomić skrypt języka Python.Enter each of the following code blocks into Cmd 1 and press Cmd + Enter to run the Python script.

Aby utworzyć ramki danych dla źródeł danych, uruchom następujący skrypt:To create data frames for your data sources, run the following script:

  • Zastąp wartość symboluzastępczegościeżkądopliku<csv-folder-path> CSV.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)

Wprowadź ten skrypt, aby uruchomić pewne podstawowe zapytania analizy na danych.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))

Oczyszczanie zasobówClean up resources

Gdy grupa zasobów i wszystkie pokrewne zasoby nie będą już potrzebne, usuń je.When they're no longer needed, delete the resource group and all related resources. W tym celu zaznacz grupę zasobów konta magazynu i wybierz pozycję Usuń.To do so, select the resource group for the storage account and select Delete.

Następne krokiNext steps