カスタム変換を作成する - AWS Glue Studio

カスタム変換を作成する

データに対してより複雑な変換を実行する必要がある場合、またはデータプロパティキーをデータセットに追加する場合は、ジョブ図にカスタムコード変換を追加します。カスタムコードノードを使用すると、変換を実行するスクリプトを入力できます。

カスタムコードを使用する場合は、スキーマエディタを使用して、カスタムコードを通して出力に加えらえる変更を指定する必要があります。スキーマの編集時に、次のアクションを実行できます。

  • データプロパティキーの追加または削除

  • データプロパティキーのデータ型の変更

  • データプロパティキーの名前の変更

  • ネストされたプロパティキーの再構築

出力をターゲットの場所に送信するには、SelectFromCollection 変換を使用して、カスタム変換ノードの結果から単一の DynamicFrame を選択する必要があります。

次のタスクを実行して、カスタム変換ノードをジョブ図に追加できます。

カスタムコード変換ノードをジョブ図に追加する

カスタム変換ノードをジョブ図に追加するには
  1. (オプション) ビジュアルエディタの上部のツールバーで [Transform] (変換) を選択します。その後、[Custom transform] (カスタム変換) を選択して、新しい変換をジョブ図に追加します。

  2. [Node properties] (ノードのプロパティ) タブで、ジョブ図のノードの名前を入力します。ノードの親がまだ選択されていない場合、またはカスタム変換に複数の入力が必要な場合は、[Node parents] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。

カスタム変換ノードのコードを入力する

入力フィールドにコードを入力またはコピーできます。ジョブでは、データ変換の実行にこのコードを使用します。Python または Scala のいずれかでコードのスニペットを指定できます。コードは、入力として 1 つ以上の DynamicFrames を取り、DynamicFrames のコレクションを返す必要があります。

カスタム変換ノードのスクリプトを入力するには
  1. ジョブ図でカスタム変換ノードを選択した状態で、[Transform] (変換) タブを選択します。

  2. 見出し [Code block] (コードブロック) の下のテキスト入力フィールドで、変換用のコードを貼り付けるか、入力します。使用するコードは、[Job details] (ジョブの詳細) タブのジョブで指定されている言語と一致する必要があります。

    コード内の入力ノードを参照する場合、AWS Glue Studio は、作成された順序に基づきジョブの図表ノードによって連続的に返される DynamicFrames に名前を付けます。コード内で次のいずれかのネーミングメソッドを使用します。

    • Classic code generation — 関数名を使用して、ジョブダイアグラム内のノードを参照します。

      • データソースノード: DataSource0DataSource1DataSource2 などです。

      • 変換ノード: Transform0Transform1Transform2 などです。

    • New code generation — '_node1','_node2'などが添付されたノードの[Node properties]タブ上で指定された名前を使用します。例えば、S3bucket_node1ApplyMapping_node2S3bucket_node2MyCustomNodeName_node1

    各エラーコード generator のさらなる詳細については、「スクリプトコードの生成」を参照してください。

次の例は、コードボックスに入力するコードの形式を示しています。

Python

次の例では、まず DynamicFrame を受信し、それを DataFrame に変換してネイティブフィルターメソッド (1000 票を超えるレコードのみを保持)を適用しています。その後、返す前に DynamicFrame に再び変換しています。

def FilterHighVoteCounts (glueContext, dfc) -> DynamicFrameCollection: df = dfc.select(list(dfc.keys())[0]).toDF() df_filtered = df.filter(df["vote_count"] > 1000) dyf_filtered = DynamicFrame.fromDF(df_filtered, glueContext, "filter_votes") return(DynamicFrameCollection({"CustomTransform0": dyf_filtered}, glueContext))
Scala

次の例では、まず DynamicFrame を受信し、それを DataFrame に変換してネイティブフィルターメソッド (1000 票を超えるレコードのみを保持)を適用しています。その後、返す前に DynamicFrame に再び変換しています。

object FilterHighVoteCounts { def execute(glueContext : GlueContext, input : Seq[DynamicFrame]) : Seq[DynamicFrame] = { val frame = input(0).toDF() val filtered = DynamicFrame(frame.filter(frame("vote_count") > 1000), glueContext) Seq(filtered) } }

カスタム変換ノードでスキーマを編集する

カスタム transform ノードを使用する場合、AWS Glue Studio は、transform によって作成された出力スキーマを自動で推測することはできません。スキーマエディタを使用して、カスタム変換コードによって実装されるスキーマの変更を記述できます。

カスタムコードノードでは、カスタムコードの入力として DynamicFrame を提供する任意の数の親ノードを持つことができます。カスタムコードノードでは、DynamicFrames のコレクションが返されます。入力として使用される各 DynamicFrame には、スキーマが関連付けられています。カスタムコードノードによって返される各 DynamicFrame を記述するスキーマを追加する必要があります。

注記

カスタム変換で独自のスキーマを設定した場合、AWS Glue Studio は、前のノードからのスキーマ継承を行いません。スキーマを更新するには、カスタム変換のノードを選択した上で、[Data preview] (データプレビュー) タブを開きます。プレビューが生成されたら、[Use Preview Schema] (プレビュースキーマを使用) をクリックします。その後、このスキーマがプレビューデータを使用するスキーマに置き換えられます。

カスタム変換ノードの入力スキーマを編集するには
  1. ジョブ図でカスタム変換ノードを選択した状態で、ノードの詳細パネルの [Output schema] (出力スキーマ) タブを選択します。

  2. [Edit] (編集) を選択して、スキーマを変更します。

    配列やオブジェクトなどのネストされたデータのプロパティキーがある場合、各スキーマパネルの右上部にある [Expand-Rows] (行の展開) アイコン ( 
                  A double-ended arrow pointing upwards and downwards between two parallel
                    lines
                ) を選択して、子データのプロパティキーのリストを展開します。このアイコンは、選択すると [Collapse-Rows] (列の折りたたみ) アイコン ( 
                  Two arrows, one pointing up to a line and one pointing down to the same
                    line
                ) に変わり、子のプロパティキーのリストを折りたたむことができます。

  3. ページ右側のセクションにある次のアクションを使用して、スキーマを変更します。

    • プロパティキーの名前を変更するには、プロパティキーの [Key] (キー) テキストボックスにカーソルを置き、新しい名前を入力します。

    • プロパティキーのデータ型を変更するには、リストを使用して、プロパティキーの新しいデータ型を選択します。

    • トップレベルの新しいプロパティキーをスキーマに追加するには、[Cancel] (キャンセル) ボタンの左側にある [Overflow] (オーバーフロー) ( 
                      An ellipsis (...)
                    ) アイコンをクリックして、[Add root key] (ルートキーの追加) を選択します。

    • スキーマに子のプロパティキーを追加するには、親キーに関連付けられている [Add-Key] (キーの追加) ( 
                      A rectangle with a plus sign in the bottom left corner
                    ) アイコンをクリックします。子のキーの名前を入力し、データ型を選択します。

    • スキーマからプロパティキーを削除するには、キー名の右端にある [Remove] (削除) アイコン ( 
                      An outline of a trash can
                    ) をクリックします。

  4. カスタム変換コードで DynamicFrames を複数使用していない場合、他の出力スキーマを追加できます。

    • 新しい空のスキーマを追加するには、[Overflow] (オーバーフロー) ( 
                      An ellipsis (...)
                    ) アイコンをクリックし、[Add output schema] (出力スキーマの追加) を選択します。

    • 既存のスキーマを新しい出力スキーマにコピーするには、コピーするスキーマがスキーマセレクタに表示されていることを確認します。[Overflow] (オーバーフロー) ( 
                      An ellipsis (...)
                    ) アイコンをクリックして、[Duplicate] (複製) を選択します。

    出力スキーマを削除する場合は、コピーするスキーマがスキーマセレクタに表示されていることを確認します。[Overflow] (オーバーフロー) ( 
                  An ellipsis (...)
                ) アイコンをクリックして、[Delete] (削除)を選択します。

  5. 新しいスキーマに新しいルートキーを追加するか、複製したキーを編集します。

  6. 出力スキーマを変更する場合は、[Apply] (適用) ボタンをクリックして変更を保存し、スキーマエディタを終了します。

    変更を保存しない場合は、[Cancel] (キャンセル) ボタンをクリックします。

カスタム変換の出力を設定する

カスタムコード変換では、1 つの結果セットに DynamicFrame が 1 つだけであっても、DynamicFrames のコレクションが返されます。

カスタム変換ノードからの出力を処理するには
  1. カスタム変換ノードを親ノードとして持つ SelectFromCollection 変換ノードを追加します。この変換を更新して、使用するデータセットを指定します。詳細については、「SelectFromCollection を使用して保持するデータセットを選択する」を参照してください。

  2. カスタム変換ノードによって生成される他の DynamicFrames を使用する場合は、SelectFromCollection 変換をジョブ図に追加します。

    カスタム変換ノードを追加してフライトのデータセットを複数のデータセットに分割し、フライトの日付や番号などの各出力スキーマで識別プロパティキーを複製するシナリオを考えてみましょう。各出力スキーマに、カスタム変換ノードを親として持つ SelectFromCollection 変換ノードを追加します。

  3. (オプション) その後、各 SelectFromCollection 変換ノードをジョブ内の他のノードの入力として、またはデータターゲットノードの親として使用できます。