Oracle Cloud Infrastructureデータ・フローの開始

このチュートリアルでは、任意のApache Sparkアプリケーションを任意のスケールで実行できるサービスであり、デプロイまたは管理するインフラストラクチャがないOracle Cloud Infrastructure Data Flowを紹介します。

以前にSparkを使用したことがある場合は、このチュートリアルからさらに詳しく学習できますが、Sparkに関する事前の知識は必要ありません。すべてのSparkアプリケーションおよびデータが提供されています。このチュートリアルでは、データ・フローにより、Sparkアプリケーションの実行が容易、繰返し可能、セキュアで、エンタープライズ全体での共有が簡単になる方法を示します

このチュートリアルで次を学習します:
  1. データ・フローアプリケーションJavaを使用してETLを実行する方法
  2. SQLアプリケーションでのSparkSQLの使用方法
  3. 簡単な機械学習タスクを実行するためにPythonアプリケーションを作成して実行する方法

このチュートリアルは、spark-submitをCLIから使用するか、spark-submitおよびJava SDKを使用して実行することもできます。

データ・フローの利点
データ・フローが、独自のSparkクラスタまたは他のSparkサービスを実行するよりも適切である理由を次に示します。
  • サーバーレス。つまり、Sparkクラスタのプロビジョニング、パッチ適用、アップグレードまたはメンテナンスを行うエキスパートは必要ありません。つまり、Sparkコードに集中するだけです。
  • 簡単な操作とチューニング。Spark UIへのアクセスは1回クリックするだけで、IAM認可ポリシーによって管理されます。ユーザーにジョブの実行速度が遅すぎるという不満がある場合、「実行」へのアクセス権を持つ任意のユーザーがSpark UIを開いて根本原因に移動できます。Spark履歴サーバーへのアクセスは、すでに実行されたジョブと同じように単純です。
  • バッチ処理に最適。アプリケーションの出力は、REST APIによって自動的に取得され、使用可能になります。4時間のSpark SQLジョブを実行して、パイプライン管理システムに結果をロードする必要がありますか。データ・フロー,では、2つのREST APIコールのみです。
  • 統合されたコントロール。データ・フローでは、すべてのSparkアプリケーション、誰がそれを実行しているか、およびその使用量の統合ビューが提供されます。どのアプリケーションが最も多くのデータを書き込んでいるか、およびそれを実行しているのは誰かを知る必要がありますか。「データ書込み」列でソートするだけです。ジョブの実行時間が長すぎますか。適切なIAM権限を持つユーザーは、ジョブを表示して停止できます。
実行のリストの例。 9列および3行の表があります。列は、「名前」、「言語」、「ステータス」、「所有者」、「作成日時」、「期間」、「oCPU合計」、「データ読取り」および「データ書込み」です。3つの行のすべてのセルに移入されています。名前は「チュートリアル例1」、「チュートリアル例2」および「チュートリアル例3」です。それぞれの言語はJava、PythonおよびSQLです。3つのステータスはすべて「成功」です。

開始する前に

このチュートリアルを正常に実行するには、テナンシの設定が完了し、データ・フローにアクセスできる必要があります。

テナンシの設定

データ・フローを実行できるようにするには、有効なログの取得と実行管理を許可する権限を付与する必要があります。データ・フロー・サービス・ガイドの管理の設定の項を参照し、そこで説明されている手順に従います。

データ・フローへのアクセス
  1. コンソールで、ナビゲーション・メニューをクリックして、使用可能なサービスのリストを表示します。
  2. 「分析とAI」を選択します。
  3. 「ビッグ・データ」で、「データ・フロー」を選択します。
  4. 「アプリケーション」を選択します。

1. Javaを使用したETL

データ・フローでJavaアプリケーションを作成する方法を学習する演習

ここでのステップは、コンソールUIを使用する場合のものです。この演習は、spark-submitをCLIから使用するか、spark-submitをJava SDKとともに使用して実行できます。

概要

データ処理アプリケーションの最も一般的な最初のステップは、ソースからデータを取得し、レポート作成や他の分析形式に適したフォーマットに取り込むことです。データベースでは、フラット・ファイルをデータベースにロードし、索引を作成します。Sparkでの最初のステップは、データの消去、およびテキスト・フォーマットからParquetフォーマットへの変換です。Parquetは効率的な読取りをサポートする最適化されたバイナリ・フォーマットで、レポートおよび分析に最適です。この演習では、ソース・データを取り込み、Parquetに変換して、関連するいくつかのことを実行します。データセットはBerlin Airbnbデータ・データセットで、クリエイティブ・コモンズCC0 1.0ユニバーサル(CC0 1.0)の「パブリック・ドメイン専用」ライセンスに基づいてKaggle Webサイトからダウンロードされました。

「CSV Data」「Easy to Read」、「Slow」のラベルの付いたボックスがあります。矢印が「Parquet」、「Harder to Read」、「Fast」のラベルの付いた右側にあるボックスに向かっています。そこから、「SQL Queries」のラベルが付いたボックスへ1本、「Machine Learning」のラベルが付いたボックスへもう1本の、2つの矢印があります。

データはCSVフォーマットで指定され、最初のステップではこのデータをParquetに変換し、ダウンストリーム処理のためにオブジェクト・ストアに格納します。oow-lab-2019-java-etl-1.0-SNAPSHOT.jarと呼ばれるSparkアプリケーションが提供され、この変換が行われます。目的は、このSparkアプリケーションを実行し、適切なパラメータを使用して実行するデータ・フロー・アプリケーションを作成することです。はじめるため、この演習では、ステップごとに必要なパラメータを説明します。後でパラメータを自分で指定する必要があるため、入力内容と理由を理解している必要があります。

Javaアプリケーションの作成

コンソールから、またはコマンドラインからSpark-submitを使用して、あるいはSDKを使用して、データ・フローJavaアプリケーションを作成します。

コンソールでのJavaアプリケーションの作成。

コンソールからデータ・フローにJavaアプリケーションを作成します。

データ・フロー・アプリケーションの作成

  1. 左上にあるハンバーガ・メニューを展開して一番下までスクロールし、コンソールでデータ・フロー・サービスに移動します。
  2. 「データ・フロー」をハイライトしてから、「アプリケーション」を選択します。データ・フロー・アプリケーションを作成するコンパートメントを選択します。最後に、「アプリケーションの作成」をクリックします。 「アプリケーションの作成」をクリック
  3. 「Javaアプリケーション」を選択し、アプリケーションの名前(Tutorial Example 1など)を入力します。 「アプリケーション」ページが、右側の「アプリケーションの作成」プルアウトとともに表示されています。上部には、「Name」というテキスト・フィールドと「Description」というテキスト・フィールドがある「General Information」セクションがあります。次に、2つのテキスト・フィールドが表示されるリソース構成というセクションがあります。下部には、「作成」、「スタックとして保存」および「取消」の3つのボタンがあります。
  4. 「リソース構成」に移動します。これらの値はすべてデフォルトのままにします。 「アプリケーション」ページが、右側の「アプリケーションの作成」プルアウトとともに表示されています。「リソース構成」セクションが表示されます。最上部には、「Sparkバージョン」というドロップダウン・リストがあります。「Spark 3.0.2」が選択されていますが、「Spark 2.4.4」および「Spark 3.2.1」もリストされています。下にはありますが、Sparkバージョンのリストで部分的に非表示になっているのは、「プールの選択」というテキスト・フィールドです。次に、「ドライバ・シェイプ」というテキスト・フィールドがあります。VM.Standard.E4。Flexが選択されています。OCPUの数をカスタマイズするセクションを次に示します。下部には、「作成」、「スタックとして保存」および「取消」の3つのボタンがあります。
  5. 「アプリケーション構成」までスクロールします。次のようにしてアプリケーションを構成します:
    1. ファイルURL: オブジェクト・ストレージ内のJARファイルの場所です。このアプリケーションの場所:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar
    2. メイン・クラス名: Javaアプリケーションには、アプリケーションに依存するメイン・クラス名が必要です。この演習では次を入力します
      convert.Convert
    3. 引数: Sparkアプリケーションでは、入力用と出力用の2つのコマンドライン・パラメータを想定しています。「引数」フィールドで、次のように入力します
      ${input} ${output}
      デフォルト値のプロンプトが表示され、ここではデフォルト値を入力することをお薦めします。
    「アプリケーション」ページが、右側のside.The「アプリケーション構成」セクションの上に「アプリケーション」プルアウトが表示されています。上部には、「ファイルの選択」というセクションがあります。「ファイルのURLを手動で入力」というラベルのチェック・ボックスは選択されています。次は、「ファイルURL」というテキスト・フィールドです。.jarファイルへのパスが移入されています。その下に、「メイン・クラス名」というテキスト・フィールドがあります。convert.Convertが移入されています。その下に、「引数」というテキスト・フィールドがあります。${input} ${output}が移入されています。
  6. 入力および出力引数は次のとおりです。
    1. 入力:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv
    2. 出力:
      oci://<yourbucket>@<namespace>/optimized_listings

    アプリケーションの構成を再確認して、次のようになっているかどうかを確認してください: 「アプリケーション」ページが、右側の「アプリケーションの作成」プルアウトとともに表示されています。「アプリケーション構成」セクションが表示されます。「引数」というテキスト・フィールドがあります。${input} ${output}が移入されています。その下に、「パラメータ」用のテキスト・フィールドがあります。左側に2つあり、グレー表示され、それぞれ、入力と出力が移入されています。それぞれの横には、「デフォルト値」というラベルのテキスト・フィールドがあり、このフィールドには、それぞれのディレクトリが移入されています。次に、アーカイブURIというセクションを示します。

    ノート

    テナント内のバケットを指すように出力パスをカスタマイズする必要があります。
  7. 完了したら、「作成」を選択します。アプリケーションが作成されると、「アプリケーション」リストに表示されます。「アプリケーション」ページです。アプリケーションのリストに、1つのアプリケーションがあります。名前、言語、Sparkバージョン、アプリケーション・タイプ、所有者、作成および更新の7つの列で構成されます。「名前」には「チュートリアル例1」が含まれています。「言語」は「Java」に設定されています。Sparkバージョンは3.2.1に設定されています。アプリケーション・タイプが「バッチ」に設定されています。その他のフィールドは、アプリケーションの作成者、作成日時および最終更新日時(この場合は「作成日時」と同じ)に従って移入されます。

完了しました。最初のデータ・フロー・アプリケーションを作成しました。次に、これを実行できます。

Spark-SubmitおよびCLIを使用したJavaアプリケーションの作成

spark-submitおよびCLIを使用して、Javaアプリケーションを作成します。

  1. テナンシを設定します。
  2. 入力および結果を保存できるバケットがオブジェクト・ストレージにない場合は、適切なフォルダ構造を持つバケットを作成する必要があります。この例では、フォルダ構造は/output/tutorial1です。
  3. 次のコードを実行します:
    oci --profile <profile-name> --auth security_token data-flow run submit \
    --compartment-id <compartment-id> \
    --display-name Tutorial_1_ETL_Java \
    --execute '
        --class convert.Convert 
        --files oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv 
        oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar \
        kaggle_berlin_airbnb_listings_summary.csv oci://<bucket-name>@<namespace-name>/output/tutorial1'
    このチュートリアルを以前に実行したことがある場合は、出力ディレクトリoci://<bucket-name>@<namespace-name>/output/tutorial1の内容を削除して、チュートリアルが失敗しないようにします。
    ノート

    compartment-idを確認するには、ナビゲーション・メニューで「アイデンティティ」をクリックし、「コンパートメント」をクリックします。使用可能なコンパートメントがそれぞれのOCIDも含めてリストされます。
Spark-SubmitおよびSDKを使用したJavaアプリケーションの作成

spark-submitおよびJava SDKを使用して、データ・フローでJavaアプリケーションを作成する演習を実行します。

これらのファイルは、この演習を実行するファイルであり、次のパブリック・オブジェクト・ストレージURIで使用できます。

  • CSV形式の入力ファイル:
    oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv
  • JARファイル:
    oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar
  1. 入力および結果を保存できるバケットをオブジェクト・ストレージに作成します。
  2. 次のコードを実行します:
    public class Tutorial1 {
     
      String compartmentId = "<your-compartment_id>"; // Might need to change comapartment id
     
      public static void main(String[] ars) throws IOException {
        System.out.println("ETL with JAVA Tutorial");
        new Tutorial1().crateRun();
      }
     
      public void crateRun() throws IOException {
     
        // Authentication Using BOAT config from ~/.oci/config file
        final ConfigFileReader.ConfigFile configFile = ConfigFileReader.parseDefault();
     
        final AuthenticationDetailsProvider provider =
            new ConfigFileAuthenticationDetailsProvider(configFile);
     
        // Creating a Data Flow Client
        DataFlowClient client = new DataFlowClient(provider);
        client.setRegion(Region.US_PHOENIX_1);
        client.setEndpoint("http://<IP_address>:443");   // Might need to change endpoint
     
        // creation of execute String
        String executeString = "--class convert.Convert "
            + "--files oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/kaggle_berlin_airbnb_listings_summary.csv "
            + "oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow-lab-2019-java-etl-1.0-SNAPSHOT.jar "
            + "kaggle_berlin_airbnb_listings_summary.csv oci://<bucket_name>@<tenancy_name>/output/tutorial1";
     
        // Create Run details and create run.
        CreateRunDetails runDetails = CreateRunDetails.builder()
            .compartmentId(compartmentId).displayName("Tutorial_1_ETL_with_JAVA").execute(executeString)
            .build();
     
        CreateRunRequest runRequest = CreateRunRequest.builder().createRunDetails(runDetails).build();
        CreateRunResponse response = client.createRun(runRequest);
        GetRunRequest grq = GetRunRequest.builder().opcRequestId(response.getOpcRequestId()).runId(response.getRun().getId()).build();
        GetRunResponse gr = client.getRun(grq);
     
        System.out.println("Run Created!");
     
      }
    }
データ・フローJavaアプリケーションの実行

Javaアプリケーションを作成したので、それを実行できます。

  1. ステップを正確に実行した場合は、リストで自分のアプリケーションをハイライト表示し、「アクション」メニューを選択して「実行」をクリックするだけで済みます。
  2. アプリケーションを実行する前に、パラメータをカスタマイズする機能が提示されます。この場合は、前もって正確な値を入力したので、「実行」をクリックするだけで実行を開始できます。「Javaアプリケーションの実行」プルアウト・ページが、「アプリケーション」ページの右側に表示されます。上部には、「ドライバ・シェイプ」というドロップダウン・リストがあり、「VM.Standard2.1 (15GB、1OCPU)」が選択されています。その下に、「エグゼキュータ・シェイプ」というドロップダウン・リストがあり、「VM.Standard2.1 (15 GB、1 OCPU)」が選択されています。その下には、「エグゼキュータの数」というラベルのテキスト・フィールドがあり、1が入力されています。その下に、「引数」というテキスト・フィールドがあります。グレー表示されており、「${input} ${output}」が入力されています。次に、パラメータ用のテキスト・フィールドが2つ並んでいます。1つ目は「名前」でグレー表示されていますが、「入力」と表示されています。もう1つは「デフォルト値」で、入力ディレクトリが表示されていますが、編集は可能です。右側の一番上にはスクロール・バーがあります。画面の下部には、「実行」と「取消」の2つのボタンがあります。「実行」をクリックしようとしています。
  3. アプリケーションの実行中に、オプションで、進行状況をモニターするためにSpark UI をロードできます。該当する実行の「アクション」メニューから、「Spark UI」を選択します。 「アプリケーション」ページに、チュートリアル例1のアプリケーションだけがリストされています。リストの行の最後にあるケバブ・メニューがクリックされ、「詳細の表示」、「編集」、「実行」、「タグの追加」、「タグの表示」および「削除」が表示されています。「Spark UI」をクリックしようとしています。

  4. エグゼキュータのグラフィック、それがいつ追加または削除されたか、ジョブ、それがいつ実行しているか、および成功したかまたは失敗したかを含むSpark UI。色分けされています。その下に、6つの列のアクティブ・ジョブの表があります。列は、「ジョブID」、「説明」、「送信日時」、「期間」、「ステージ: 成功/合計」および「タスク(すべてのステージ): 成功/合計」です。
  5. 1分後、「実行」Succeededの状態で正常に終了したことが表示されます。 「チュートリアル例1」および「チュートリアル例2」の2つの実行がリストされた「実行」ページが表示されています。実行の表には9つの列があります。「名前」、「言語」、「ステータス」、「所有者」、「作成日時」、「期間」、「oCPU合計」、「データ読取り」および「データ書込み」です。チュートリアル例1のステータスは「成功」です。

  6. 「実行」をドリルして追加の詳細を確認し、一番下までスクロールしてログのリストを表示します。「実行の詳細」ページの下部に「ログ」のラベルの付いたセクションが含まれています。2つのログ・ファイルを含む5つの列の表があります。列は、「名前」、「ファイル・サイズ」、「ソース」、「タイプ」および「作成日時」です。stdout.logファイルとstderr.logファイルがあります。「ログ」セクションの左側のメニューは「リソース」というセクションです。これには、「ログ」(選択されると強調表示されます)および「関連する実行」が含まれます。

  7. spark_application_stdout.log.gzファイルをクリックすると、ログ出力Conversion was successfulが表示されます。 空白のページがあり、一番上にテキストが表示されています。テキストは「変換は成功しました」です。

  8. 出力オブジェクト・ストレージ・バケットに移動して、新しいファイルが作成されたことを確認することもできます。 「オブジェクト」セクションが表示されています。「オブジェクトのアップロード」、「リストア」および「削除」の3つのボタンがあります。最初のもののみがアクティブです。その下には「名前」、「サイズ」、「ステータス」、「作成日時」の4つの列の表があり、使用可能なオブジェクトがリストされています。

    これらの新しいファイルは、後のアプリケーションで使用されます。次の演習に進む前に、バケットに表示されていることを確認します。

2. SparkSQLによる簡易化

この演習では、SQLスクリプトを実行して、データセットの基本的なプロファイリングを実行します。

この演習では、「1. Javaを使用したETL」で生成した出力を使用します。これを試す前に、正常に完了している必要があります。

ここでのステップは、コンソールUIを使用する場合のものです。この演習は、spark-submitをCLIから使用するか、spark-submitをJava SDKとともに使用して実行できます。

概要

他のデータ・フロー・アプリケーションと同様に、SQLファイルはオブジェクト・ストレージに格納され、多数のSQLユーザーで共有されます。これを支援するために、データ・フローでは、SQLスクリプトをパラメータ化し、実行時にカスタマイズできます。他のアプリケーションと同様にデフォルト値をパラメータに指定でき、これらのスクリプトを実行する人の貴重な手がかりとなることがよくあります。

SQLスクリプトはデータ・フロー・アプリケーションで直接使用でき、コピーを作成する必要はありません。ここでスクリプトを再度示し、いくつかの点を説明します。

SparkSQLスクリプトのリファレンス・テキスト: サンプルSparkSQLコードの一部です。

重要なハイライト:
  1. スクリプトは、必要なSQL表の作成から開始します。現在、データ・フローには永続SQLカタログがないため、すべてのスクリプトは必要な表を定義することから始まります。
  2. 表の場所は、${location}として設定されます。これは、ユーザーが実行時に指定する必要があるパラメータです。これによりデータ・フローには、1つのスクリプトを使用して多くの様々な場所を処理し、様々なユーザー間でコードを共有する柔軟性が与えられます。このラボでは、演習1で使用した出力場所を指すように${location}をカスタマイズする必要があります
  3. 前述のとおり、SQLスクリプトの出力は取得され、「実行」の下で使用できます。
SQLアプリケーションの作成
  1. データ・フローで、SQLアプリケーションを作成し、タイプとして「SQL」を選択して、デフォルトのリソースを受け入れます。 「アプリケーションの作成」プルアウト・ページでは、「アプリケーション」ページの右側をカバーしており、「アプリケーション構成」というセクションがあります。「Sparkストリーミング」および「Spark-Submitオプションの使用」チェック・ボックスは選択されていません。「言語」というラベルの下には、4つのラジオ・ボタンがあります。言語としてSQLが選択されています。
  2. 「アプリケーション構成」で、SQLアプリケーションを次のように構成します:
    1. ファイルURL: オブジェクト・ストレージ内のSQLファイルの場所です。このアプリケーションの場所:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_sparksql_report.sql
    2. 引数: SQLスクリプトでは、前のステップからの出力の場所である1つのパラメータを想定しています。「パラメータの追加」をクリックし、テンプレートに基づいて、ステップaで出力パスとして使用した値を入れて、locationという名前のパラメータを入力します
      oci://[bucket]@[namespace]/optimized_listings

    完了したら、アプリケーション構成が次のようになっていることを確認します:

    「アプリケーションの作成」プルアウト・ページでは、「アプリケーション」ページの右側にある「アプリケーション構成」セクションが表示されます。「Spark-Submitオプションの使用」チェック・ボックスがあり、選択はされていません。「言語」には4つのラジオ・ボタンがあり、「SQL」が選択されています。「ファイルの選択」というセクションがあります。「ファイルのURLを手動で入力」チェック・ボックスが選択されています。「ファイルURL」のラベルがついたテキスト・ボックスには、.sqlファイルへのリンクが含まれています。その下の「パラメータ」サブセクション内に、2つのテキスト・ボックスが横に並んでいます。1つ目は「名前」のラベルが付き、場所が含まれています。2つ目は「値」というラベルで、ディレクトリへのパスが入力されています。

  3. 場所の値をテナンシの有効なパスにカスタマイズします。
SQLアプリケーションの実行
  1. アプリケーションを保存し、「アプリケーション」リストから実行します。 このチュートリアルで作成した2つのアプリケーションが新しい順に表示された「アプリケーション」ページ。アプリケーションをリストした表には、「名前」、「言語」、「所有者」、「作成日時」および「更新日時」の5つの列があります。各行の最後にはケバブ・メニューがあります。チュートリアル例2で、ケバブ・メニューがクリックされ、オプションが表示されています。これらは、「詳細の表示」、「編集」、「実行」、「タグの追加」、「タグの表示」および「削除」です。「実行」をクリックしようとしています。
  2. 実行の完了後、実行を開きます。 このチュートリアルで作成した2つのアプリケーションが新しい順に表示された「実行」ページ。それぞれに1つの実行のみがあります。アプリケーションをリストした表には、「名前」、「言語」、「ステータス」、「所有者」、「作成日時」、「期間」、「oCPU合計」、「データ読取り」および「データ書込み」の9つの列があります。チュートリアル例2のステータスは「成功」で、表の他のセルは移入されています。
  3. 実行ログに移動します: 「実行の詳細」ページの下部。詳細の下には「ログ」のラベルが付いたセクションがあります。5列の表に使用可能なログ・ファイルを示しています。列は、「名前」、「ファイル・サイズ」、「ソース」、「タイプ」および「作成日時」です。リストされている2つのログ・ファイルは、stdout.logおよびstderr.logです。左側には、「リソース」のラベルが付いた小さなセクションがあります。「ログ」と「リソース」の2つのリンクがあります。ログが選択されています。
  4. spark_application_stdout.log.gzを開き、出力が次の出力と一致していることを確認します。
    ノート

    図とは異なる順序で行が表示されることがありますが、値は一致する必要があります。
    spark_application_stdout.log.gzファイルの出力。データには5つの列があります。この列には名前はなく、幅の列に一貫性はありません。最初の列にはテキストが含まれ、他の列には数値が含まれています。
  5. SQLプロファイリングに基づき、このデータセットでは、Neukollnの平均定価は最低の$46.57で、Charlottenburg-Wilmersdorfは最大の$114.27です(ノート: ソース・データセットの価格はEURではなくUSDです)。

この演習では、データ・フローの重要な側面を示します。SQLアプリケーションを配置すると、クラスタの容量、データ・アクセスおよび保持、資格証明管理またはその他のセキュリティの考慮事項を心配することなく、誰でも簡単に実行できます。たとえば、ビジネス・アナリストはデータ・フローとともにSparkベースのレポートを簡単に使用できます。

3. PySparkを使用した機械学習

PySparkを使用して、入力データに対して単純な機械学習タスクを実行します。

この演習では、1. Javaを使用したETLからの出力を入力データとして使用します。この演習を試す前に、最初の演習を正常に完了する必要があります。ここでの目的は、Spark機械学習アルゴリズムを使用して、各種のAirbnbリストの中から最適な取引を識別することです。

ここでのステップは、コンソールUIを使用する場合のものです。この演習は、spark-submitをCLIから使用するか、spark-submitをJava SDKとともに使用して実行できます。

概要

PySparkアプリケーションは、データ・フロー・アプリケーションで直接使用できます。コピーを作成する必要はありません。

次に、いくつかの点を説明するために、PySparkスクリプトのリファレンス・テキストを示します: サンプルPySparkコード。

このコードからのいくつかの所見:
  1. Pythonスクリプトでコマンドライン引数(赤でハイライト表示)が必要です。データ・フロー・アプリケーションを作成する際、ユーザーが入力パスに設定するパラメータを作成する必要があります。
  2. このスクリプトは線形回帰を使用して、リスト当たりの価格を予測し、予測から定価を減算して最適な取引を検索します。最もマイナスの値は、モデルごとの最適値を示します。
  3. このスクリプトのモデルは簡略化されており、平方フィートのみが考慮されます。実際の設定では、近隣や他の重要な予測子変数など、より多くの変数を使用します。
PySparkアプリケーションの作成

コンソールから、またはコマンドラインからSpark-submitを使用して、あるいはSDKを使用して、PySparkアプリケーションを作成します。

コンソールを使用したPySparkによる機械学習

コンソールを使用して、データ・フローにPySparkアプリケーションを作成します。

  1. アプリケーションを作成し、Pythonタイプを選択します。
    「アプリケーションの作成」プルアウト・ページで、言語としてPythonが選択されています。
  2. 「アプリケーション構成」で、アプリケーションを次のように構成します:
    1. ファイルURL: オブジェクト・ストレージ内のPythonファイルの場所です。このアプリケーションの場所:
      oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_pyspark_ml.py
    2. 引数: Sparkアプリケーションでは、入力用と出力用の2つのコマンドライン・パラメータを想定しています。「引数」フィールドで、次のように入力します
      ${location}
      .デフォルト値を指定するように求められます。テンプレートのステップaの出力パスとして使用される値を入力します:
      oci://<bucket>@<namespace>/optimized_listings
  3. アプリケーションの構成を再確認して、次のようになっているかどうかを確認してください:
    「アプリケーションの作成」プルアウト・ページで、「アプリケーション」ページの右側にある「アプリケーション構成」セクションが表示されます。「Spark-Submitオプションの使用」というチェック・ボックスがあり、選択はされていません。言語としてPythonが選択されています。「ファイルURL」のラベルのついたテキスト・ボックスには、.pyファイルへのリンクが含まれています。その下に、${location}を含む「引数」のラベルが付いた別のテキスト・ボックスがあります。その下の「パラメータ」サブセクション内に、2つのテキスト・ボックスが横に並んでいます。1つ目はグレー表示され、場所が入力されています。2つ目には、ディレクトリへのパスが入力されています。
  4. 場所の値をテナント内の有効なパスにカスタマイズします。
Spark-SubmitおよびCLIを使用したPySparkによる機械学習

Spark-submitおよびCLIを使用して、データ・フローにPySparkアプリケーションを作成します。

  1. この演習を実行する前に、「Spark-SubmitおよびCLIを使用したJavaアプリケーションの作成」の演習を実行します。結果がこの演習で使用されます。
  2. 次のコードを実行します:
    oci --profile <profile-name> --auth security_token data-flow run submit \
    --compartment-id <compartment-id> \
    --display-name Tutorial_3_PySpark_ML \
    --execute '
        oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_pyspark_ml.py 
        oci://<your_bucket>@<namespace-name>/output/tutorial1'
Spark-SubmitおよびSDKを使用したPySparkによる機械学習

Spark-submitおよびSDKを使用して、データ・フローにPySparkアプリケーションを作成します。

  1. この演習を試行する前に、「Spark-SubmitおよびSDKを使用したJavaアプリケーションの作成」の演習を完了します。結果がこの演習で使用されます。
  2. 次のコードを実行します:
    public class PySParkMLExample {
     
      private static Logger logger = LoggerFactory.getLogger(PySParkMLExample.class);
      String compartmentId = "<compartment-id>"; // need to change comapartment id
     
      public static void main(String[] ars){
        System.out.println("ML_PySpark Tutorial");
        new PySParkMLExample().createRun();
      }
     
      public void createRun(){
     
        ConfigFileReader.ConfigFile configFile = null;
        // Authentication Using config from ~/.oci/config file
        try {
          configFile = ConfigFileReader.parseDefault();
        }catch (IOException ie){
          logger.error("Need to fix the config for Authentication ", ie);
          return;
        }
     
        try {
        AuthenticationDetailsProvider provider =
            new ConfigFileAuthenticationDetailsProvider(configFile);
     
        DataFlowClient client = new DataFlowClient(provider);
        client.setRegion(Region.US_PHOENIX_1);
     
        String executeString = "oci://oow_2019_dataflow_lab@idehhejtnbtc/oow_2019_dataflow_lab/usercontent/oow_lab_2019_pyspark_ml.py oci://<bucket-name>@<namespace-name>/output/optimized_listings";
     
        CreateRunResponse response;
     
        CreateRunDetails runDetails = CreateRunDetails.builder()
            .compartmentId(compartmentId).displayName("Tutorial_3_ML_PySpark").execute(executeString)
            .build();
     
        CreateRunRequest runRequest = CreateRunRequest.builder().createRunDetails(runDetails).build();
        CreateRunResponse response = client.createRun(runRequest);
     
        logger.info("Successful run creation for ML_PySpark with OpcRequestID: "+response.getOpcRequestId()
            +" and Run ID: "+response.getRun().getId());
     
        }catch (Exception e){
          logger.error("Exception creating run for ML_PySpark ", e);
        }
     
     
      }
    }
PySparkアプリケーションの実行
  1. 「アプリケーション」リストからアプリケーションを実行します。このチュートリアルで作成した3つのアプリケーションが新しい順に表示された「アプリケーション」ページ。アプリケーションをリストした表には、「名前」、「言語」、「所有者」、「作成日時」および「更新日時」の5つの列があります。各行の最後にはケバブ・メニューがあります。チュートリアル例3で、ケバブ・メニューがクリックされ、オプションが表示されています。これらは、「詳細の表示」、「編集」、「実行」、「タグの追加」、「タグの表示」および「削除」です。「実行」をクリックしようとしています。
  2. 「実行」が完了したらそれを開き、ログに移動します。「実行の詳細」ページの下部。詳細の下には「ログ」のラベルが付いたセクションがあります。5列の表に使用可能なログ・ファイルを示しています。列は、「名前」、「ファイル・サイズ」、「ソース」、「タイプ」および「作成日時」です。リストされている2つのログ・ファイルは、stdout.logおよびstderr.logです。左側には、「リソース」のラベルが付いた小さなセクションがあります。「ログ」と「リソース」の2つのリンクがあります。ログが選択されています。

  3. spark_application_stdout.log.gzファイルを開きます。出力は次と同じになります: spark_application_stdout.log.gzファイルの出力。6つの列の表があります。列は、id、name、features、price、predictionおよびvalueです。最初の20行のみが表示されています。すべてのセルが移入されます。
  4. この出力から、面積が4639平方フィートで定価$35.00に比べて、予測価格$313.70のリストID 690578が最適な取引であることがわかります。少し話が出来すぎで本当とは思えない場合は、一意のIDでデータにドリルバックして、これが本当の掘り出し物かどうかを正確に把握できます。この場合も、ビジネス・アナリストは、この機械学習アルゴリズムの出力を簡単に使用して、さらに分析を行うことができます。

次の手順

これで、データ・フローを使用してJava、PythonまたはSQLアプリケーションを作成および実行し、結果を調べることができます。

データ・フローは、デプロイメント、分解、ログ管理、セキュリティおよびUIアクセスのすべての詳細を処理します。データ・フローでは、インフラストラクチャを気にすることなく、Sparkアプリケーションの開発に集中します。