Hadoop で大きな行列計算を行うための一種のミニ フレームワークを作成しようとしています。つまり、〜Prod(Sum(x, y), z) // (X + Y) * Z
のように、x、y、z - 行列または数値であり、それを計算し、出力結果をファイルに書き込みます。だから私はScalding
、matrix と number を使用していますが、実際には同じものです。そして問題は、分解に対処する方法がわからないことです。
私が何を意味するかを説明させてください: 数値について話している場合 (今は , などなしhadoop
でscalding
純粋な のみ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 つの問題があります。
- 適切な decomp トレイトを作成する方法 (このよう
Expr
に、私が見ているようStrings
に、ファイルの名前のみを扱うことができます)? - ジョブではないクラス内からジョブを実行する方法は? つまり、マトリックス名を渡すことができるクラスを意味し、すべてを送信してhadoopで計算し、結果を返しますか? Hadoop の入力ファイルのみを送信し、結果の出力のみを送信する方がよいことがわかりました。(いくつかの操作の連鎖?しかし、それらを作成する方法、私が見る方法は、分解を行い、すべてを計算するジョブを送信することです。しかし、ジョブ
Expression
が評価に依存している場合、この大きなジョブを作成する方法。別のバリアント-送信する各ジョブ (Sum
、Prod
など) を個別に) - 出力ファイルを操作するにはどうすればよいですか? 大量の操作を取得した場合、中間計算のすべての結果を保存する必要があり、ファイル名を保持する方法は?
- 私の考えは正しいですか?
PS ありがとうございます。Hadoop について多くの情報が見つからなかったので、同様のアイデア (リンク) の例をいくつか示して、hadoop をより理解するのに非常に役立ちます。そして最も問題なのは、どのクラスからジョブを実行するかということです。
解決済み
それで私は方法を見つけました、私は分解の仕事を1つ手に入れました、それはあまり賢い質問ではありませんでした。