稀疏矩阵 RDD 中值的标准化

Standarization of values in sparse matrix RDD

我想对产品推荐使用矩阵分解(准确地说是使用 MLlib 中的 ALS),我没有评级,但使用购买次数(隐式信息,稀疏矩阵)。在训练之前,我想按客户标准化数据集(矩阵中的行,其中列是产品,交集是数量)。 Matrix有几百万行,几万列,所以我想尽量用RDD。

我的数据存储在元组列表中:

(int, int, int)

[(Client1, Product1, amount)
(Client1, Product2, amount)
(Client2, Product1, amount)
(Client2, Product3, amount)]

我想标准化客户购买的产品数量。我想到了 groupByKey 转换,但不知道从哪里开始。

编辑:我所采用的方法的主要问题是使用 RDD 和实现与 RDD(在 mllib 包中可用)一起工作的 ALS 而不是使用 DataFrames 的主要 ML 库(在 ml 包中可用)。由于嵌套转换在 RDD 中不可用,因此使用 DataFrame 有很大帮助。

试试这个:

>>> from pyspark.mllib.linalg.distributed import *
>>> from pyspark.mllib.linalg.distributed import *
>>> 
>>> cm = CoordinateMatrix(rdd.map(lambda (c, p, a): MatrixEntry(c, p, a)))
>>> irm = cm.toIndexedRowMatrix()
>>> idxs = irm.rows.map(lambda row: row.index)
>>> vcs = irm.rows.map(lambda row: row.vector)
>>>
>>> nzr = Normalizer(1)
>>> rows = idxs.zip(nzr.transform(vcs)).map(lambda (index, vector): IndexedRow(index, vector))
>>> normalized = IndexedRowMatrix(rows).toCoordinateMatrix().entries.