5C. [Repositories] データ変換による複数の出力5 - 複数の出力を持つトランスフォーム

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

5 - 複数の出力を持つトランスフォーム

📖 タスクの概要

transform() デコレータを使用して、複数の出力を指定することもできます。このタスクでは、flyer_statusPlatinum である乗客のみをフィルター処理する複数の出力を持つトランスフォームを作成し、各優先度(高、中、低)のフライトアラート用の別々のデータセットを作成します。

この方法では、generated transformfor ループ で見たように、全体の入力を一度にすべてのロジックで処理することはありません。まず Platinum の乗客を1回だけフィルター処理し、その後、フィルター処理されたデータフレームを共有して複数の出力データセットを作成します。

🔨 タスクの説明

  1. Master から新しいブランチを作成し、yourName/feature/multi_output と命名します。

  2. リポジトリの Files 内の /output フォルダーを右クリックし、新しいファイル flight_alerts_by_priority.py を追加します。

  3. 新しい Python トランスフォームファイルのデフォルトのコードを、以下のコードブロックに置き換えます。

    from transforms.api import transform, Input, Output
    
    
    # Pass multiple Output specifications to the transform() decorator to split the input:
    @transform(
        source_df=Input("${flight_alerts_joined_passengers_RID}"),
        high=Output("/${namespace}/Temporary Training Artifacts/${yourName}/Data Engineering Tutorials/Transform Project: Alert Metrics/data/output/flight_alerts_platinum_high"),
        medium=Output("/${namespace}/Temporary Training Artifacts/${yourName}/Data Engineering Tutorials/Transform Project: Alert Metrics/data/output/flight_alerts_platinum_medium"),
        low=Output("/${namespace}/Temporary Training Artifacts/${yourName}/Data Engineering Tutorials/Transform Project: Alert Metrics/data/output/flight_alerts_platinum_low"),
    )
    def alerts_by_priority(source_df, high, medium, low):
    
        # filter the source dataframe to just those records where the passenger status is "Platinum"
        platinum_df = source_df.dataframe().filter(source_df.dataframe().flyer_status == 'Platinum')
    
        # Call the write_dataframe() function on each output to write the dataframe out to a dataset for each filtered priority
        high.write_dataframe(platinum_df.filter(platinum_df.priority == 'High'))
        medium.write_dataframe(platinum_df.filter(platinum_df.priority == 'Medium'))
        low.write_dataframe(platinum_df.filter(platinum_df.priority == 'Low'))
    
  4. コード内の以下の行を置き換えます。

    • ${namespace}あなたの ネームスペースに
    • ${yourName}あなたの /Tutorial Practice Artifacts フォルダー名に
    • ${flight_alerts_joined_passengers_RID}flight_alerts_joined_passengers.py変換済み 出力の RID に置き換えます。
  5. Preview ボタンをクリックします。プレビューウィンドウには、それぞれの出力(高、中、低)に対応する3つのタブが表示されます。

  6. 結果が期待通りである場合(つまり、Platinum にフィルター処理され、指定された priority が適用されている場合)、ブランチ上でコードをコミットしてビルドします。

  7. ビルドが成功した場合(つまり、データセットが期待通りにマテリアライズされた場合)、入力/出力パスを RID に更新し、コミットを検討します。この操作では、ブラウザの更新が必要になることがあります。"Replace paths with RIDs" リンクが表示されるようにするために。

  8. PR プロセスを完了し、ブランチを Master にマージします(マージ後にブランチを削除してもかまいません)。

  9. Master ブランチでコードをビルドします。

📚 推薦文献(約1分)

Python トランスフォームのドキュメントの このセクション で、複数の出力を持つトランスフォームについてもう少し読んでみてください。