Amazon SageMaker Data Wranglerで複数データのJoin / Concatenateを試してみた

2022.05.17

いわさです。

先日、SageMaker Data Wranglerを使ってAmazon S3データからCSVファイルをインポートし、どういった処理が出来るのかを少し触っていました。
その時に複数のデータを結合/連結させる方法が最初よくわからなくて調べていました。

元のデータ

以下のようなシンプルなCSVをS3バケットへアップロードしておきます。
それぞれのファイルのレイアウトは若干違っています。(列の過不足がある)

fuga1.csv

title,numA,numB
title1,1,1
title2,0,1

fuga2.csv

title,numB,numC
title3,,0
title4,0,1

SageMaker Data Wranglerでインポート

まずはSageMakaerでData Wranglerを起動しインポートデータにAmazon S3を指定します。

それぞれのファイルをデータソースに指定するだけで、すぐにインポート自体はされます。

Joinしてみる

ここからが全く操作がわからなかったのですが、取り込まれたデータソースの「+」アイコンからデータ処理をステップ形式で設定します。
デフォルトでは、データのインポートとデータタイプ設定が選択されています。

今回は割愛しましたが、データタイプ設定で取り込み後の列に対して文字列やら数値やら指定することが可能です。
Add transformにはデータ処理のメジャーな変換処理が用意されていて利用することが出来ます。

Joinを選択することで、データの結合が出来ます。

SQLとかのJoinと同じ感じですね。
Join TypeでRight/Left、Inner/Outer/Full Outerなどなど選択が出来ます。

今回のサンプルデータには結合フィールドに一致するレコードが無いのでちょっとイマイチでした、すみません。
Full Outerなので上記のような形になります。

Concatenateしてみる

次は、Concatenateを試してみました。
Concatenateはデータソースとデータソースを連結します。
SQLでいうところのUNIONでしょうか。

Concatenateする場合は同じ列名で揃っている必要があります。列の過不足があると構成時にエラーが発生します。
今回のサンプルデータでは列の過不足が生じているので、まず不足している列を補ってやることにしました。

Add transformで追加列をCustomで設定が出来るので列を追加してやって、その上でConcatenateしました。

今回のサンプルデータだとこちらのほうがきれいな形になりましたね。
あとはJoinでもConcatenateでも重複列が発生する可能性があると思うので、そのあたりはビジネスロジックを決めて集計処理を入れてやる必要があると思います。

Add transformはGroupingに関する変換もありますので、そちらで対応出来るかと思います。

さいごに

本日はSageMaker Data Wrangerを使ってJoinとConcatenate機能を使ってみました。
AWS認定試験の機械学習の試験範囲にData Wrangerは含まれているので、どういうサービスなのかは知ってはいたのですが、細かい利用イメージは全く知りませんでした。

今回はシンプルな2つのデータを結合/連結させただけなのでおそらくData Wranglerだとオーバースペックだったのだと思います。最小インスタンスサイズが大きいやつしかなくて驚きました。
次回はもう少しData Wranglerの強みを引き出せるようなデータを準備しておきたいと思います。