2017-02-28 6 views
8

パイプラインにいくつかのNatural言語処理タスクを配置するために、Spotify's Luigiを使用してPython 3.6で私の最初のプロジェクトをコーディングしていました。ルイージのタスク間でPythonオブジェクトを渡す?

Taskクラスのoutput()関数は、常にある種のファイルであるTargetオブジェクトを返すことに気付きました。これはローカルかリモートのいずれかのファイルです。私のタスクはパーズツリーのようなより複雑なデータ構造を生成するので、文字列としてファイルに書き込んでから読み直すのはかなり面倒です。

したがって、パイプライン内のタスク間にPythonオブジェクトを渡す可能性はありますか?

答えて

7

短い答え:いいえ。

ルイジ・パラメータは、日付/ DateTimeオブジェクト、文字列、int型とfloat型に限定されています。 docs for referenceを参照してください。

これは、複雑なデータ構造体を文字列としてシリアル化する必要があることを意味します(json、msgpack、好きなシリアライザを使用し、それを圧縮することもできます)、文字列パラメータとして渡します。

もちろん、カスタムParameterサブクラスを書くことができますが、serialize and parse methodsを基本的に実装する必要があります。

しかし、計算されたデータをターゲットに保存する代わりにパラメータを使用すると、Luigiを使用した場合の重要な利点が失われます。ツリー内の親タスクが指定した再試行回数複雑なデータ構造を計算するタスクを再度実行する必要があります。あなたのタスクが複雑なデータを計算したり、かなりの時間を費やしたり、多くのリソースを消費した場合は、高価な計算をやり直す必要がないように、出力をターゲットとして保存する必要があります。

また、別のタスクでもそのデータが必要な場合がありますので、保存しないでください。あなたは、データベーステーブルへのRedis、Hadoopの、弾性検索インデックスをあなたのデータを保存し、より多くの可能性があります:http://luigi.readthedocs.io/en/stable/api/luigi.contrib.html#submodules

+0

どうもありがとう

はまた、ターゲットはファイルだけではないことに注意してください! +答え。 – Kaleidophon

関連する問題