15

Makefilesには多くの素晴らしい点があり、お尻には多くの苦痛があります。

さまざまなプロジェクト(私は研究科学者、「データサイエンティスト」など)を行う過程で、ディスク上のいくつかのデータオブジェクトから始めて、それらからさまざまなアーティファクトを生成し、それらのアーティファクトからアーティファクトを生成することがよくあります。すぐ。

「このオブジェクトはこれらの他のオブジェクトに依存している」、「このオブジェクトはこれらのオブジェクトから次のように作成されている」と言ってから、Makeのようなフレームワークに実際のビルドの詳細を処理するように依頼するとよいでしょう。 、更新する必要のあるオブジェクトの特定、複数のプロセッサへの作業のファームアウト(Makeの-jオプションなど)など。Makefilesはこれをすべて行うことができますが、大きな問題は、すべてのアクションをシェルコマンドとして記述しなければならないことです。これは、RやPerl、または他の同様の環境で作業している場合には便利ではありません。さらに、Makeの強力な前提は、すべてのターゲットがファイルであるということです。いくつかの例外と回避策がありますが、ターゲットがデータベース内の行などである場合、それはかなり苦痛になります。

明確にするために、私はソフトウェアビルドシステムを求めていません。私は(より一般的には?)アーティファクトの依存関係のウェブを扱う何かに興味があります。

この種の依存関係Webのフレームワークを知っている人はいますか?データサイエンスを実行したり、結果がどのように生成されたかを視覚的に示したりするための優れたツールになる可能性があるようです。

最近見た非常に興味深い例の1つはIncPyでしたが、しばらく触れられていないようで、Pythonと非常に密接に関連しています。それはおそらく私が望んでいるよりもはるかに野心的であり、それがPythonと非常に緊密に結合されなければならない理由です。

漠然とした質問で申し訳ありませんが、いくつかの説明が役立つかどうか教えてください。

4

4 に答える 4

5

「Drake」と呼ばれる新しいシステムが本日発表され、まさにこの状況を対象としています: http://blog.factual.com/introducing-drake-a-kind-of-make-for-data . 私はまだ実際に試していませんが、非常に有望に見えます。

于 2013-01-25T03:30:31.833 に答える
1

Bazelにこれを試してもらいます。これは主にソフトウェア ビルド システムですが、そのgenruleタイプのアーティファクトにより、かなり任意のファイル生成も実行できます。

Bazel は非常に拡張性が高く、Python に似たStarlark言語を使用しているため、make よりも複雑なタスクをはるかに簡単に使用できます。genrule手で簡単な手順を書くことから始めて、共通パターンをマクロにリファクタリングし、さらに複雑になったら独自のルールを書くこともできます。したがって、個々の変換を高レベルで表現して、それらについての考え方をモデル化し、適切なプログラミング言語のように感じられるものを使用して、その表現を低レベルの構造に変換できる必要があります。

make がタイムスタンプに依存する場合、Bazel はフィンガープリントをチェックします。そのため、入力の 1 つが変更されたにもかかわらず、いずれかのステップで同じ出力が生成された場合、後続のステップを再計算する必要はありません。データ処理ステップの一部がデータを投影またはフィルタリングする場合、この種のことが発生する可能性が高くなります。

あまり言及されていませんが、あなたの質問はR用にタグ付けされています。内部では、Bazel の R 計算はR CMDシェルでの呼び出しに要約されます。しかし、入力を読み取って処理し、出力を保存するために、複雑な複数行のコマンドを複雑な方法で組み立てることができます。Rバイナリの初期化のコストが懸念される場合は、 RserveRserveを使用するとセットアップがローカルにアクセス可能なインスタンスに依存するようになりますが、役立つかもしれません。それでも、データをファイルに保存し、ファイルからロードするコストを回避するものは何もありません。ステップ間で物事をメモリに保持することでそのコストを回避するものが必要な場合は、要求したような汎用ツールではなく、非常に R 固有のツールを検討することになります。

「結果がどのように生成されたかを視覚的に示す」という点では、依存関係グラフのgraphvizbazel query --output graphファイルを生成するために使用できます。 dot

免責事項: 私は現在、Blaze と呼ばれる Bazel の亜種を内部で使用している Google で働いています。実際、Bazel は Blaze のオープンソース リリース バージョンです。Blaze の使用には慣れていますが、Bazel を最初からセットアップすることには慣れていません。

于 2021-12-15T15:31:05.590 に答える
0

Red-Rには、データ フロー プログラミングの概念があります。まだ試していません。

于 2012-12-15T02:19:16.043 に答える