データに対してより複雑な変換を実行する必要がある場合、またはデータプロパティキーをデータセットに追加する場合は、ジョブ図にカスタムコード変換を追加します。カスタムコードノードを使用すると、変換を実行するスクリプトを入力できます。
カスタムコードを使用する場合は、スキーマエディタを使用して、カスタムコードを通して出力に加えらえる変更を指定する必要があります。スキーマの編集時に、次のアクションを実行できます。
-
データプロパティキーの追加または削除
-
データプロパティキーのデータ型の変更
-
データプロパティキーの名前の変更
-
ネストされたプロパティキーの再構築
出力をターゲットの場所に送信するには、SelectFromCollection 変換を使用して、カスタム変換ノードの結果から単一の DynamicFrame
を選択する必要があります。
次のタスクを実行して、カスタム変換ノードをジョブ図に追加できます。
カスタムコード変換ノードをジョブ図に追加する
カスタム変換ノードをジョブ図に追加するには
-
(オプション) リソースパネルを開いて、[Custom transform] を選択し、ジョブ図にカスタム変換を追加します。
-
[Node properties] (ノードのプロパティ) タブで、ジョブ図のノードの名前を入力します。ノードの親がまだ選択されていない場合、またはカスタム変換に複数の入力が必要な場合は、[Node parents] (ノードの親) リストから、変換の入力ソースとして使用するノードを選択します。
カスタム変換ノードのコードを入力する
入力フィールドにコードを入力またはコピーできます。ジョブでは、データ変換の実行にこのコードを使用します。Python または Scala のいずれかでコードのスニペットを指定できます。コードは、入力として 1 つ以上の DynamicFrames
を取り、DynamicFrames
のコレクションを返す必要があります。
カスタム変換ノードのスクリプトを入力するには
-
ジョブ図でカスタム変換ノードを選択した状態で、[Transform] (変換) タブを選択します。
-
見出し [Code block] (コードブロック) の下のテキスト入力フィールドで、変換用のコードを貼り付けるか、入力します。使用するコードは、[Job details] (ジョブの詳細) タブのジョブで指定されている言語と一致する必要があります。
コード内の入力ノードを参照する場合、AWS Glue Studio は、作成された順序に基づきジョブの図表ノードによって連続的に返される
DynamicFrames
に名前を付けます。コード内で次のいずれかのネーミングメソッドを使用します。-
Classic code generation — 関数名を使用して、ジョブダイアグラム内のノードを参照します。
-
データソースノード:
DataSource0
、DataSource1
、DataSource2
などです。 -
変換ノード:
Transform0
、Transform1
、Transform2
などです。
-
-
New code generation — '
_node1
','_node2
'などが添付されたノードの[Node properties]タブ上で指定された名前を使用します。例えば、S3bucket_node1
、ApplyMapping_node2
、S3bucket_node2
、MyCustomNodeName_node1
各エラーコード generator のさらなる詳細については、「スクリプトコードの生成」を参照してください。
-
次の例は、コードボックスに入力するコードの形式を示しています。
次の例では、まず 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))
カスタム変換ノードでスキーマを編集する
カスタム transform ノードを使用する場合、AWS Glue Studio は、transform によって作成された出力スキーマを自動で推測することはできません。スキーマエディタを使用して、カスタム変換コードによって実装されるスキーマの変更を記述できます。
カスタムコードノードでは、カスタムコードの入力として DynamicFrame
を提供する任意の数の親ノードを持つことができます。カスタムコードノードでは、DynamicFrames
のコレクションが返されます。入力として使用される各 DynamicFrame
には、スキーマが関連付けられています。カスタムコードノードによって返される各 DynamicFrame
を記述するスキーマを追加する必要があります。
注記
カスタム変換で独自のスキーマを設定した場合、AWS Glue Studio は、前のノードからのスキーマ継承を行いません。スキーマを更新するには、カスタム変換のノードを選択した上で、[Data preview] (データプレビュー) タブを開きます。プレビューが生成されたら、[Use Preview Schema] (プレビュースキーマを使用) をクリックします。その後、このスキーマがプレビューデータを使用するスキーマに置き換えられます。
カスタム変換ノードの入力スキーマを編集するには
-
ジョブ図でカスタム変換ノードを選択した状態で、ノードの詳細パネルの [Output schema] (出力スキーマ) タブを選択します。
-
[Edit] (編集) を選択して、スキーマを変更します。
配列やオブジェクトなどのネストされたデータのプロパティキーがある場合、各スキーマパネルの右上部にある [Expand-Rows] (行の展開) アイコン (
) を選択して、子データのプロパティキーのリストを展開します。このアイコンは、選択すると [Collapse-Rows] (列の折りたたみ) アイコン (
) に変わり、子のプロパティキーのリストを折りたたむことができます。
-
ページ右側のセクションにある次のアクションを使用して、スキーマを変更します。
-
プロパティキーの名前を変更するには、プロパティキーの [Key] (キー) テキストボックスにカーソルを置き、新しい名前を入力します。
-
プロパティキーのデータ型を変更するには、リストを使用して、プロパティキーの新しいデータ型を選択します。
-
トップレベルの新しいプロパティキーをスキーマに追加するには、[Cancel] (キャンセル) ボタンの左側にある [Overflow] (オーバーフロー) (
) アイコンをクリックして、[Add root key] (ルートキーの追加) を選択します。
-
スキーマに子のプロパティキーを追加するには、親キーに関連付けられている [Add-Key] (キーの追加) (
) アイコンをクリックします。子のキーの名前を入力し、データ型を選択します。
-
スキーマからプロパティキーを削除するには、キー名の右端にある [Remove] (削除) アイコン (
) をクリックします。
-
-
カスタム変換コードで
DynamicFrames
を複数使用していない場合、他の出力スキーマを追加できます。-
新しい空のスキーマを追加するには、[Overflow] (オーバーフロー) (
) アイコンをクリックし、[Add output schema] (出力スキーマの追加) を選択します。
-
既存のスキーマを新しい出力スキーマにコピーするには、コピーするスキーマがスキーマセレクタに表示されていることを確認します。[Overflow] (オーバーフロー) (
) アイコンをクリックして、[Duplicate] (複製) を選択します。
出力スキーマを削除する場合は、コピーするスキーマがスキーマセレクタに表示されていることを確認します。[Overflow] (オーバーフロー) (
) アイコンをクリックして、[Delete] (削除)を選択します。
-
-
新しいスキーマに新しいルートキーを追加するか、複製したキーを編集します。
-
出力スキーマを変更する場合は、[Apply] (適用) ボタンをクリックして変更を保存し、スキーマエディタを終了します。
変更を保存しない場合は、[Cancel] (キャンセル) ボタンをクリックします。
カスタム変換の出力を設定する
カスタムコード変換では、1 つの結果セットに DynamicFrame
が 1 つだけであっても、DynamicFrames
のコレクションが返されます。
カスタム変換ノードからの出力を処理するには
-
カスタム変換ノードを親ノードとして持つ SelectFromCollection 変換ノードを追加します。この変換を更新して、使用するデータセットを指定します。詳細については、「SelectFromCollection を使用して保持するデータセットを選択する」を参照してください。
-
カスタム変換ノードによって生成される他の
DynamicFrames
を使用する場合は、SelectFromCollection 変換をジョブ図に追加します。カスタム変換ノードを追加してフライトのデータセットを複数のデータセットに分割し、フライトの日付や番号などの各出力スキーマで識別プロパティキーを複製するシナリオを考えてみましょう。各出力スキーマに、カスタム変換ノードを親として持つ SelectFromCollection 変換ノードを追加します。
-
(オプション) その後、各 SelectFromCollection 変換ノードをジョブ内の他のノードの入力として、またはデータターゲットノードの親として使用できます。