私は9ミルの行と80 Kの列を持つ行列Aを持っています。行列自体は非常にまばらです。今、私は比pyspark大行列操作
ratio = (A.T x A)/(n-((1-A).T x (1-A)))
は映画のいずれかのように見える(M1またはM2)、それらの割合は何している列が、私は人々のために計算したいユーザーは私の行や映画です想像して取得したいです両方の映画(m1とm2)のように見える。
私は、Aをrddに変換することによって、最初の部分(A.T x A)の解を見つけました。
def coordinateMatrixMultiply(leftmatrix, rightmatrix):
left = leftmatrix.map(lambda (i, j, v): (j, (i, v)))
right = rightmatrix.map(lambda (j, k, w): (j, (k, w)))
productEntries = left \
.join(right) \
.map(lambda (x, ((i, v), (k, w))): ((i, k), (v * w))) \
.reduceByKey(lambda x,y: x+y) \
.map(lambda ((i, k), sum): (i, k, sum))
return productEntries
しかし、私は(1-A).T X(1-A)のためのサイズで解決することがはるかに困難である分母を見つけます。メモリのため、単純に不可能であるものの密度の高い行列を作成しようとします。私はまた、多数のデータフレームを結合するために共用体をすべて使用しようとしましたが、それは非常に遅いです。これを行うより良い方法はありますか?ありがとう!
だけの思考 - かなり密行列を維持するよりは、なぜCRません'user_id'と' movie_id'の2つのカラムを持つデータセットを作成します。それからあなたはSELF JOINであなたが望むものを達成できると信じていますか? – arun
ええ、それは私がやったことです。しかし、dataframe/rddはまばらです。 'または'の部分を得るために、私は1-A部分を取得する必要があります。あなたはその部分をどうやって手に入れようとしますか?ありがとう! – vortex
なぜ行列計算にnumpyを使用しないのですか? –