1

Hadoop で大きな行列計算を行うための一種のミニ フレームワークを作成しようとしています。つまり、〜Prod(Sum(x, y), z) // (X + Y) * Zのように、x、y、z - 行列または数値であり、それを計算し、出力結果をファイルに書き込みます。だから私はScalding、matrix と number を使用していますが、実際には同じものです。そして問題は、分解に対処する方法がわからないことです。

私が何を意味するかを説明させてください: 数値について話している場合 (今は , などなしhadoopscalding純粋な のみScala)、そのような方法で作ることができます:

trait Expr {
    def eval: Int = this match {
    case Number(n) => n
    case Sum(e1, e2) => e1.eval + e2.eval
    case Diff(e1, e2) => e1.eval - e2.eval
    case Prod(e1, e2) => e1.eval * e2.eval
}

だからあなたは私の考えを見ます。しかし、hadoop では、私が正しいと認識しているようにJobs、em を作成して送信する必要がありますhadoop。したがって、私が見る唯一の方法は、マトリックスのファイル名を処理することです。しかし、少なくとも 4 つの問題があります。

  1. 適切な decomp トレイトを作成する方法 (このようExprに、私が見ているようStringsに、ファイルの名前のみを扱うことができます)?
  2. ジョブではないクラス内からジョブを実行する方法は? つまり、マトリックス名を渡すことができるクラスを意味し、すべてを送信してhadoopで計算し、結果を返しますか? Hadoop の入力ファイルのみを送信し、結果の出力のみを送信する方がよいことがわかりました。(いくつかの操作の連鎖?しかし、それらを作成する方法、私が見る方法は、分解を行い、すべてを計算するジョブを送信することです。しかし、ジョブExpressionが評価に依存している場合、この大きなジョブを作成する方法。別のバリアント-送信する各ジョブ ( SumProdなど) を個別に)
  3. 出力ファイルを操作するにはどうすればよいですか? 大量の操作を取得した場合、中間計算のすべての結果を保存する必要があり、ファイル名を保持する方法は?
  4. 私の考えは正しいですか?

PS ありがとうございます。Hadoop について多くの情報が見つからなかったので、同様のアイデア (リンク) の例をいくつか示して、hadoop をより理解するのに非常に役立ちます。そして最も問題なのは、どのクラスからジョブを実行するかということです。


解決済み

それで私は方法を見つけました、私は分解の仕事を1つ手に入れました、それはあまり賢い質問ではありませんでした。

4

1 に答える 1

0

Scalding には既に Matrix API があります ( https://github.com/twitter/scalding/wiki/Introduction-to-Matrix-Library )。そこにどのように実装されているかを確認できます。

ところで、より小さな行列の場合、そよ風を使用します: https://github.com/scalanlp/breeze/wiki/UserGuide

于 2013-11-15T20:07:53.673 に答える