5C. [Repositories] Multiple Outputs with Data Transforms5 - 複数の出力を持つトランスフォーム
Warning

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

5 - マルチ出力トランスフォーム

learn.palantir.com でも以下の内容をご覧いただけますが、アクセシビリティの観点から、ここに掲載しています。

📖 タスクの概要

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

この方法では、生成されたトランスフォームfor ループで見たように、毎回すべての入力をフルロジックで実行するわけではありません。Platinum の乗客を一度フィルター処理すれば、その後はフィルター処理されたデータフレームを共有して複数の出力データセットを作成することができます。

🔨 タスクの説明

  1. Master から新しいブランチを作成し、ユーザーの名前/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("/${space}/Temporary Training Artifacts/${yourName}/Data Engineering Tutorials/Transform Project: Alert Metrics/data/output/flight_alerts_platinum_high"),
        medium=Output("/${space}/Temporary Training Artifacts/${yourName}/Data Engineering Tutorials/Transform Project: Alert Metrics/data/output/flight_alerts_platinum_medium"),
        low=Output("/${space}/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. コード内の以下の行を置き換えます。

    • ${space}ユーザーの スペース
    • ${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 トランスフォームのドキュメンテーションの このセクション で、マルチ出力トランスフォームについてもう少し詳しく読んでみてください。