表达式的分解(Matrix上的操作),hadoop

时间:2013-11-04 18:00:55

标签: scala hadoop matrix scalding

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

让我解释一下我的意思:如果我们谈论数字(现在没有hadoopscalding等,只有纯Scala)我们可以这样做:< / p>

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上发送em; 所以我看到的唯一方法是处理矩阵的文件名。但至少存在四个问题:

  1. 如何制作正确的解压缩特性(如此Expr,我看到的情况,我们只能处理Strings - 文件名称?
  2. 如何从任何一个班级内部开始工作,这不是一份工作?所以我的意思是一个我可以传递矩阵名称的类,它会发送每一个并计算hadoop,然后将结果带回来?我发现最好只发送hadoop输入文件,并仅发回结果输出。 (所以一些操作的链条?但是如何制作它们,我看到的方式是发送一个分解并计算所有内容的Job?但是如果Job依赖于Expression来评估,如何做出这个大工作。另一种变体 - 分别发送每个作业(SumProd等)。)
  3. 如何使用输出文件?如果我们有很多操作,我们可以存储中间计算的所有结果,以及如何保存文件名?
  4. 我的想法是对的吗?
  5. P.S。谢谢你,向我展示类似想法(链接)的一些例子,更多地了解hadoop,因为我没有找到关于它的大量信息。最棘手的问题是如何从任何一个班级运行乔布斯。


    解决

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

1 个答案:

答案 0 :(得分:0)

Scalding已经有一个Matrix API(https://github.com/twitter/scalding/wiki/Introduction-to-Matrix-Library)。你可以查看它是如何在那里实现的。

顺便说一句,对于较小的矩阵,我们使用微风: https://github.com/scalanlp/breeze/wiki/UserGuide