gokartでパイプラインの出力結果をサクサク確認するデータ分析JupyterLuigigokartこれなに?F81アドベントカレンダー9日目の長谷川です。pastelIncさんです。おめでとうございます。この記事では、パイプラインフレームワークのLuigiの出力結果を、Jupyterなどで簡単に確認するためのライブラリ、thunderboltの紹介していきます。この記事ではLuigiの基礎的な内容については、一切解説しません。思うこと多々あります。有向非巡回グラフの特性上、依存している処理の出力結果が期待している物とズレていると、そのズレが連鎖的に伝搬し、ゴミを入れてもゴミしか出ない、汚染されたパイプラインになりかねないからです。Taskを追加しまくって、どんどん開発が進むのは気分が良いですが、出力物の確認をせずにガンガン処理を増やしていくと、パイプラインが複雑化し、どこでどのような処理が行われているのかが徐々に不透明になり、期待した結果とのズレが生じた際に、そのズレがどこで生じているのかを特定するのが、より困難になっていきます。thunderbolt⚡とは?そこでthunderbolt(とgokart)の出番です。thunderboltは、Luigiをより使いやすくしたラッパーライブラリであるgokartで出力されるlogをパースし、マネージドできるライブラリです。名前の由来はマリオカートのアイテム、サンダー⚡からですね。名の通り、あくまでgokartをサポートするツールなので、gokartでluigiを構築していることが前提となっています。gokartの使い方は、M3さんのブログか、前に書いた記事をお読みください。gokartが出力するloggokartは以下のように.pkl形式でlogを出力します。利用したモジュールのバージョン処理にかかった時間loggerで出力されたlog適用されたパラメータが保存されています。gokartの場合、デフォルトだと指定したファイル名にhash値がついて保存されてます。hash値はTaskのパラメータによって決まるため頻繁に変わり、しかもlogはpickleで保存されるので、出力物をloadしたり、ログを確認したりが、いささか面倒ですが、このあたりをサポートしてくれるのがthunderboltです。公式のexampleに載ってます、おわり。Thunderbolttb=Thunderbolt(workspace_directory='[goartの保存先のディレクトリ]')で、マネージャのインスタンスを作成します。ディレクトリのパラメータが指定されていない場合、環境変数TASK_WORKSPACE_DIRECTORYで指定されたpathが参照されます。以下のようにget_task_dfで読み込むと、出力物の情報がDataFrameとして確認できます。{}出力物をload以下のようにload(task_id=[確認したい出力物のtask_id])で出力物の中身を確認できます。今回は試してないですが、S3とGCSもサポートしているので、ディレクトリのpathをs3://xxxあるいはgs://xxxとバケットを指定すると、クラウド上に出力物が保存されていても問題なく実行できるはずです。hiro@Hase8388pythonとScalaで広告システムを開発してます。FollowFringe81株式会社Fringeは、最新のテクノロジーとプロフェッショナルによるサービスにより、社会課題に仮説を立てて市場に広げていくことで、数十年という長期的なスパンで価値を生み出し続け、より良い世界を創る集団です。既存の領域に限らず、時流を読み、仮説を生み出し、テクノロジーの力で優れたサービスを生み出し続けます。upLoginユーザーは見つかりませんでした。