我正在尝试在hadoop上为大矩阵计算创建一个小框架;~z~我是什么意思~ 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
; 所以我看到的唯一方法,就是处理矩阵的文件名。但至少有四个问题:
如何做出正确的反编译特征(如 Expr
如我所见,我们只能处理 Strings
-文件名)?
如何从任何类内部运行作业,这不是作业吗?我指的是一个类,在这个类中,我可以传递矩阵名,它会在hadoop上发送所有数据和计算,然后返回结果?我发现最好只在hadoop上发送输入文件,而只返回结果输出(那么一些行动的链条呢?但如何使他们,我看到的方式是派遣一个工作,使分解和计算一切?但是,如果这项工作取决于 Expression
进行评估。另一个变体-发送每个作业( Sum
, Prod
(等)分开。)
如何操作输出文件?如果我们有很多操作,所有中间计算的结果我们都可以存储,如何保存文件名?
我的想法对吗?
p、 谢谢你,给我看一些类似想法的例子(链接)会很有帮助,让我更了解hadoop,因为我没有找到很多关于它的信息。而最有问题的问题,是如何从任何类运行作业。
解决了的
所以我找到了一个方法,我得到了一个分解的工作,这个问题不太聪明,因为我不明白我想要的过程。
1条答案
按热度按时间2w3kk1z51#
烫伤已经有了一个矩阵api(https://github.com/twitter/scalding/wiki/introduction-to-matrix-library ). 你可以看看它是怎么实现的。
顺便说一句,对于较小的矩阵,我们使用breeze:https://github.com/scalanlp/breeze/wiki/userguide