HDInsight Spark クラスターを使用して Data Lake Storage Gen1 内のデータを分析するUse HDInsight Spark cluster to analyze data in Data Lake Storage Gen1

この記事では、HDInsight Spark クラスターで利用できる Jupyter Notebook を使用して、Data Lake Storage アカウントからデータを読み取るジョブを実行します。In this article, you use Jupyter Notebook available with HDInsight Spark clusters to run a job that reads data from a Data Lake Storage account.

前提条件Prerequisites

データを準備するPrepare the data

注意

Data Lake Storage を既定のストレージとして使用する HDInsight クラスターを作成した場合は、この手順を行う必要はありません。You do not need to perform this step if you have created the HDInsight cluster with Data Lake Storage as default storage. クラスター作成処理で、クラスター作成中に指定する Data Lake Storage アカウントにいくつかのサンプル データが追加されるためです。The cluster creation process adds some sample data in the Data Lake Storage account that you specify while creating the cluster. スキップして、「Data Lake Storage で HDInsight Spark クラスターを使用する」のセクションに進みます。Skip to the section Use HDInsight Spark cluster with Data Lake Storage.

Data Lake Storage を追加ストレージとして使用し、Azure Storage Blob を既定のストレージとして使用する HDInsight クラスターを作成した場合は、まず、いくつかのサンプル データを Data Lake Storage アカウントにコピーする必要があります。If you created an HDInsight cluster with Data Lake Storage as additional storage and Azure Storage Blob as default storage, you should first copy over some sample data to the Data Lake Storage account. HDInsight クラスターに関連付けられている Azure Storage Blob のサンプル データを使用することができます。You can use the sample data from the Azure Storage Blob associated with the HDInsight cluster. この操作には、 ADLCopy ツール を使用できます。You can use the ADLCopy tool to do so. リンク先からツールをダウンロードしてインストールします。Download and install the tool from the link.

  1. コマンド プロンプトを開き、AdlCopy がインストールされているディレクトリ (通常は %HOMEPATH%\Documents\adlcopy) に移動します。Open a command prompt and navigate to the directory where AdlCopy is installed, typically %HOMEPATH%\Documents\adlcopy.

  2. 次のコマンドを実行して、ソース コンテナーの特定の BLOB を Data Lake Storage にコピーします。Run the following command to copy a specific blob from the source container to Data Lake Storage:

     AdlCopy /source https://<source_account>.blob.core.windows.net/<source_container>/<blob name> /dest swebhdfs://<dest_adls_account>.azuredatalakestore.net/<dest_folder>/ /sourcekey <storage_account_key_for_storage_container>
    

    /HdiSamples/HdiSamples/SensorSampleData/hvac/ にある HVAC.csv サンプル データ ファイルを Azure Data Lake Storage アカウントにコピーします。Copy the HVAC.csv sample data file at /HdiSamples/HdiSamples/SensorSampleData/hvac/ to the Azure Data Lake Storage account. コード スニペットを次に示します。The code snippet should look like:

     AdlCopy /Source https://mydatastore.blob.core.windows.net/mysparkcluster/HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv /dest swebhdfs://mydatalakestore.azuredatalakestore.net/hvac/ /sourcekey uJUfvD6cEvhfLoBae2yyQf8t9/BpbWZ4XoYj4kAS5Jf40pZaMNf0q6a8yqTxktwVgRED4vPHeh/50iS9atS5LQ==
    

    警告

    ファイル名とパス名で大文字と小文字が適切に使用されていることを確認します。Make sure that the file and path names use the proper capitalization.

  3. Data Lake Storage アカウントがある Azure サブスクリプションの資格情報を入力するように求められます。You are prompted to enter the credentials for the Azure subscription under which you have your Data Lake Storage account. 次のスニペットのような出力が表示されます。You see an output similar to the following snippet:

     Initializing Copy.
     Copy Started.
     100% data copied.
     Copy Completed. 1 file copied.
    

    データ ファイル (HVAC.csv) が、Data Lake Storage アカウントの /hvac フォルダーにコピーされます。The data file (HVAC.csv) will be copied under a folder /hvac in the Data Lake Storage account.

Data Lake Storage Gen1 で HDInsight Spark クラスターを使用するUse an HDInsight Spark cluster with Data Lake Storage Gen1

  1. Azure portal のスタート画面で Apache Spark クラスターのタイルをクリックします (スタート画面にピン留めしている場合)。From the Azure Portal, from the startboard, click the tile for your Apache Spark cluster (if you pinned it to the startboard). [すべて参照] > [HDInsight クラスター] でクラスターに移動することもできます。You can also navigate to your cluster under Browse All > HDInsight Clusters.

  2. Spark クラスター ブレードで、 [クイック リンク] をクリックし、 [クラスター ダッシュボード] ブレードで [Jupyter Notebook] をクリックします。From the Spark cluster blade, click Quick Links, and then from the Cluster Dashboard blade, click Jupyter Notebook. 入力を求められたら、クラスターの管理者資格情報を入力します。If prompted, enter the admin credentials for the cluster.

    注意

    ブラウザーで次の URL を開き、クラスターの Jupyter Notebook にアクセスすることもできます。You may also reach the Jupyter Notebook for your cluster by opening the following URL in your browser. CLUSTERNAME をクラスターの名前に置き換えます。Replace CLUSTERNAME with the name of your cluster:

    https://CLUSTERNAME.azurehdinsight.net/jupyter

  3. 新しい Notebook を作成します。Create a new notebook. [新規] をクリックし、 [PySpark] をクリックします。Click New, and then click PySpark.

    新しい Jupyter Notebook の作成Create a new Jupyter notebook

  4. PySpark カーネルを使用して Notebook を作成したため、コンテキストを明示的に作成する必要はありません。Because you created a notebook using the PySpark kernel, you do not need to create any contexts explicitly. 最初のコード セルを実行すると、Spark および Hive コンテキストが自動的に作成されます。The Spark and Hive contexts will be automatically created for you when you run the first code cell. このシナリオに必要な種類をインポートすることから始めることができます。You can start by importing the types required for this scenario. このためには、次のコード スニペットをセルに貼り付けて、 Shift + Enterキーを押します。To do so, paste the following code snippet in a cell and press SHIFT + ENTER.

     from pyspark.sql.types import *
    

    Jupyter でジョブを実行するたびに、Web ブラウザー ウィンドウのタイトルに [(ビジー)] ステータスと Notebook のタイトルが表示されます。Every time you run a job in Jupyter, your web browser window title will show a (Busy) status along with the notebook title. また、右上隅にある PySpark というテキストの横に塗りつぶされた円も表示されます。You will also see a solid circle next to the PySpark text in the top-right corner. ジョブが完了すると、白抜きの円に変化します。After the job is completed, this will change to a hollow circle.

    Jupyter Notebook ジョブのステータスStatus of a Jupyter notebook job

  5. Data Lake Storage Gen1 アカウントにコピーした HVAC.csv ファイルを使用して、サンプル データを一時テーブルに読み込みます。Load sample data into a temporary table using the HVAC.csv file you copied to the Data Lake Storage Gen1 account. Data Lake Storage アカウントのデータにアクセスするには、次の URL パターンを使用します。You can access the data in the Data Lake Storage account using the following URL pattern.

    • Data Lake Storage Gen1 を既定のストレージとしている場合、HVAC.csv は次の URL と同じようなパスになります。If you have Data Lake Storage Gen1 as default storage, HVAC.csv will be at the path similar to the following URL:

        adl://<data_lake_store_name>.azuredatalakestore.net/<cluster_root>/HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv
      

      または、次のように簡略化された形式を使用することもできます。Or, you could also use a shortened format such as the following:

        adl:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv
      
    • Data Lake Storage を追加ストレージとしている場合、HVAC.csv は、次のようなコピーした場所にあります。If you have Data Lake Storage as additional storage, HVAC.csv will be at the location where you copied it, such as:

        adl://<data_lake_store_name>.azuredatalakestore.net/<path_to_file>
      

      空のセルに次のコード例を貼り付けて、MYDATALAKESTORE を Data Lake Storage アカウント名に置き換え、Shift + Enter キーを押します。In an empty cell, paste the following code example, replace MYDATALAKESTORE with your Data Lake Storage account name, and press SHIFT + ENTER. このコード サンプルは、 hvacという一時テーブルにデータを登録します。This code example registers the data into a temporary table called hvac.

        # Load the data. The path below assumes Data Lake Storage is default storage for the Spark cluster
        hvacText = sc.textFile("adl://MYDATALAKESTORE.azuredatalakestore.net/cluster/mysparkcluster/HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
      
        # Create the schema
        hvacSchema = StructType([StructField("date", StringType(), False),StructField("time", StringType(), False),StructField("targettemp", IntegerType(), False),StructField("actualtemp", IntegerType(), False),StructField("buildingID", StringType(), False)])
      
        # Parse the data in hvacText
        hvac = hvacText.map(lambda s: s.split(",")).filter(lambda s: s[0] != "Date").map(lambda s:(str(s[0]), str(s[1]), int(s[2]), int(s[3]), str(s[6]) ))
      
        # Create a data frame
        hvacdf = sqlContext.createDataFrame(hvac,hvacSchema)
      
        # Register the data fram as a table to run queries against
        hvacdf.registerTempTable("hvac")
      
  6. PySpark カーネルを使用しているため、%%sql マジックを使用して、作成した一時テーブル hvac に対して SQL クエリを直接実行できます。Because you are using a PySpark kernel, you can now directly run a SQL query on the temporary table hvac that you just created by using the %%sql magic. %%sql マジックの詳細と、PySpark カーネルで使用できるその他のマジックの詳細については、Apache Spark HDInsight クラスターと Jupyter Notebook で使用可能なカーネルに関する記事を参照してください。For more information about the %%sql magic, as well as other magics available with the PySpark kernel, see Kernels available on Jupyter notebooks with Apache Spark HDInsight clusters.

     %%sql
     SELECT buildingID, (targettemp - actualtemp) AS temp_diff, date FROM hvac WHERE date = \"6/1/13\"
    
  7. ジョブが正常に完了すると、既定で次の出力が表示されます。Once the job is completed successfully, the following tabular output is displayed by default.

    クエリ結果のテーブル出力Table output of query result

    他の視覚化でも結果を表示できます。You can also see the results in other visualizations as well. たとえば、ある出力の領域グラフは次のようになります。For example, an area graph for the same output would look like the following.

    クエリ結果の領域グラフArea graph of query result

  8. アプリケーションの実行が完了したら、Notebook をシャットダウンしてリソースを解放する必要があります。After you have finished running the application, you should shutdown the notebook to release the resources. そのためには、Notebook の [ファイル] メニューの [Close and Halt] (閉じて停止) をクリックします。To do so, from the File menu on the notebook, click Close and Halt. これにより、Notebook がシャットダウンされ、閉じられます。This will shutdown and close the notebook.

次の手順Next steps