Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在scala中使用mllib将两个RDD相乘而不使用out?_Scala_Apache Spark - Fatal编程技术网

如何在scala中使用mllib将两个RDD相乘而不使用out?

如何在scala中使用mllib将两个RDD相乘而不使用out?,scala,apache-spark,Scala,Apache Spark,我有一个不使用mllib的矩阵加法示例代码 val result = rdd1.zip(rdd2) .map(y => { val res = y._1.zip(y._2) .map { items: (Double, Double) => (items._1 + items._2) } res.mkString(delimiter) }) 请帮助我将两个RDD相乘您可以调用此方法以获得相乘的结果

我有一个不使用mllib的矩阵加法示例代码

val result = rdd1.zip(rdd2)
    .map(y => {
     val res =  y._1.zip(y._2)
         .map { items: (Double, Double) =>
        (items._1 + items._2)
      }
      res.mkString(delimiter)
    })

请帮助我将两个RDD相乘

您可以调用此方法以获得相乘的结果

  def mult[A](a: Array[Array[A]], b: Array[Array[A]])(implicit n: Numeric[A]): Array[Array[A]] = {
    import n._
    for (row <- a)
      yield for(col <- b.transpose)
        yield row zip col map Function.tupled(_*_) reduceLeft (_+_)
  }
def mult[A](A:Array[A]],b:Array[A]](隐式n:Numeric[A]):Array[A]={
进口_

对于(行)在上面的代码中您面临的问题是什么?请详细说明此代码没有问题。但我不知道如何实现乘法。此示例代码用于加法而不是乘法矩阵乘法,其中矩阵是
RDD[Array[t]]
不是一个小问题(如果您实际上指的是
矩阵乘法
,而不是elment-wise乘法)。即使是一个可接受的解决方案,实际上也需要付出巨大的努力才能完成。据我所知,您甚至可以忘记在不花费整整4-5天的时间的情况下获得一个像样的实现。我强烈建议您使用mlib。原因是矩阵乘法中的各种操作都需要基于索引的ele访问这对于RDD非常有效。但是你可以从一个基于属性
a(B+C)的“初学者”解决方案开始=AB+AC
的矩阵乘法。@AkhilaV我还强烈建议使用MLLib的矩阵类。您不应该使用collect,因为它可能会导致驱动程序内存不足,而且速度会很慢,因为这仅适用于数组。如何将其应用于RDD[Array[Double]]否。使用collect时,其已更改为数组对吗?使用数组时,不可能使用大型files@Jet真的吗?永远不要建议使用collect,因为它会破坏并行性。此解决方案与Spark不兼容。鼓励收集,除非数据集很小,如果一开始数据很小,则不应使用Spark。