rdd/dataframeにはM_Matrix
とN_Matrix
オブジェクトが含まれているため、タプルと一致させることはできません。このような何か作業をする必要があります:
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)}
が
電子しまうケースクラスを使用するよりも、よりよい解決策がMatrixEntry
を使用する:RDDSを構築する際
import org.apache.spark.mllib.linalg.distributed.MatrixEntry
M_Matrix
とN_Matrix
の代わりにそれを使用して、その後、 join
は次のようになります。
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)}
これにより、参加した2人と同じRDD[MatrixEntry]
になります。
質問にさらにコードを追加してください。 'M_'と' N_'行列と 'M_Matrix'と' N_Matrix'の定義をどうやって作りますか?私は正しい定義(別の質問から)と信じているものを追加しました。 – Shaido