1

我正在尝试为hadoop上的大矩阵计算制作一种迷你框架;我的意思是,smth like~ Prod(Sum(x, y), z) // (X + Y) * Z,其中 x,y,z - 矩阵或数字,并计算它,并将一些输出结果写入文件。所以我用的是Scalding,矩阵和数字其实是一回事。还有问题,我不知道如何处理分解。

让我解释一下我的意思:如果我们谈论数字(现在没有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并发送它们hadoop;所以我看到的唯一方法是处理矩阵的文件名。但至少存在四个问题:

  1. 如何制作正确的 decomp 特征(像这样Expr,我看到的情况,我们只能处理Strings- 文件名)?
  2. 如何从任何班级内部运行工作,这不是工作?所以我的意思是一个我可以传递矩阵名称的类,它会发送everyting并在hadoop上计算,然后把结果带回来?我发现最好只发送 hadoop 输入文件,只发送结果输出。(所以一些操作的链?但是如何制作它们,我看到的方式是发送一个分解并计算所有内容的作业?但是如果作业依赖于Expression评估,如何完成这项大工作。另一个变体 - 发送每个 Job ( Sum, Prod, 等) 分开。)
  3. 如何操作输出文件?如果我们有很多操作,我们应该存储中间计算的所有结果,以及如何保留文件名?
  4. 我的想法对吗?

PS谢谢你,向我展示一些类似想法(链接)的例子会非常有帮助,以便更多地了解hadoop,因为我没有找到很多关于它的信息。最成问题的问题是如何从任何类运行作业。


解决了

所以我找到了一种方法,我得到了一份分解的工作,这不是太聪明的问题,因为我不明白我想要的过程。

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 回答