Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.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错误:无法将构造函数实例化为预期类型;_Scala_Apache Spark_Sparse Matrix_Matrix Multiplication - Fatal编程技术网

scala错误:无法将构造函数实例化为预期类型;

scala错误:无法将构造函数实例化为预期类型;,scala,apache-spark,sparse-matrix,matrix-multiplication,Scala,Apache Spark,Sparse Matrix,Matrix Multiplication,我正试图在scala中对两个大矩阵进行矩阵乘法。下面是乘法的逻辑: val res = M_.map( M_ => (M_.j,M_) ) .join(N_.map( N_ => (N_.j, N_))) .map({ case (_, ((i, v), (k, w))) => ((i, k), (v * w)) }) .reduceByKey(_ + _) .map({ case ((i, k), sum) => (i, k, sum)

我正试图在scala中对两个大矩阵进行矩阵乘法。下面是乘法的逻辑:

val res = M_.map( M_ => (M_.j,M_) )
    .join(N_.map( N_ => (N_.j, N_)))
    .map({ case (_, ((i, v), (k, w))) => ((i, k), (v * w)) })
    .reduceByKey(_ + _)
    .map({ case ((i, k), sum) => (i, k, sum) })
M
N
是这两类的两个RDD:

case class M_Matrix ( i: Long, j: Long, v: Double )
case class N_Matrix ( j: Long, k: Long, w: Double )
但我得到了以下错误:


我在这里做错了什么?

因为您的rdd/数据帧包含与元组不匹配的
M_矩阵
N_矩阵
对象。像这样的方法应该会奏效:

val res = M_.map( M_ => (M_.j,M_) )
    .join(N_.map( N_ => (N_.j, N_)))
    .map{ case (_, (m_matrix, n_matrix)) => ((m_matrix.i, n_matrix.k), m_matrix.v * n_matrix.w)}
    .reduceByKey(_ + _)
    .map{ case ((i, k), sum) => (i, k, sum)}

比使用case类更好的解决方案是使用
MatrixEntry

import org.apache.spark.mllib.linalg.distributed.MatrixEntry
在构建RDD时,使用它而不是
M_矩阵
N_矩阵
,然后
连接
可以如下所示:

val res = M_.map( M_ => (M_.j,M_) )
    .join(N_.map( N_ => (N_.i, N_)))
    .map{ case (_, (m_matrix, n_matrix)) => ((m_matrix.i, n_matrix.j), m_matrix.value * n_matrix.value)}
    .reduceByKey(_ + _)
    .map{ case ((i, k), sum) => MatrixEntry(i, k, sum)}

这将导致出现一个RDD[MatrixEntry],与加入的两个相同。

请在问题中添加更多代码。如何创建
M_
N_
矩阵以及
M_矩阵和
N_矩阵的定义。我添加了我认为正确的定义(来自另一个问题)。这是构建rdd的正确方法吗?val M_u=sc.textFile(args(0)).map{line=>val a=line.split(“,”)MatrixEntry(a(0).toLong,a(1).toLong,a(2).toDouble)}@AvinashGayam,如果您有一个csv文件作为该方法的输入,那么它应该工作。你试过了吗?