我正在尝试为hadoop上的大矩阵计算制作一种迷你框架;我的意思是,smth像〜Prod(Sum(x, y), z) // (X + Y) * Z
,其中x,y,z - 矩阵或数字,并计算它,并将一些输出结果写入文件。
所以我使用Scalding
,矩阵和数字实际上是相同的。
而问题是,我不知道如何处理分解。
让我解释一下我的意思:如果我们谈论数字(现在没有hadoop
,scalding
等,只有纯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;
所以我看到的唯一方法是处理矩阵的文件名。但至少存在四个问题:
Expr
,我看到的情况,我们只能处理Strings
- 文件名称?Expression
来评估,如何做出这个大工作。另一种变体 - 分别发送每个作业(Sum
,Prod
等)。)P.S。谢谢你,向我展示类似想法(链接)的一些例子,更多地了解hadoop,因为我没有找到关于它的大量信息。最棘手的问题是如何从任何一个班级运行乔布斯。
解决
所以我找到了一种方法,我得到了一份分解工作,这不是一个太聪明的问题,因为我不理解我想要的过程。
答案 0 :(得分:0)
Scalding已经有一个Matrix API(https://github.com/twitter/scalding/wiki/Introduction-to-Matrix-Library)。你可以查看它是如何在那里实现的。
顺便说一句,对于较小的矩阵,我们使用微风: https://github.com/scalanlp/breeze/wiki/UserGuide