Учитывая Spark DataFrame со столбцом идентификаторов и столбцом нормализованных векторов объектов:
df.select("id", "norm")
res247: org.apache.spark.sql.DataFrame = [id: double, norm: vector]
df.count()
res150: Long = 3445
Я хочу преобразовать векторы объектов в распределенную матрицу.Я буду использовать столбец id и векторы для генерации IndexedRowMatrix
def transfunc(r: Row) = {new IndexedRow(r.getAs[Double](0).toLong,
r.getAs[SparseVector](1))
}
val irm = new IndexedRowMatrix(tfidf_df.select("id", "norm").rdd.map(transfunc))
transfunc: (r: org.apache.spark.sql.Row)org.apache.spark.mllib.linalg.distributed.IndexedRow
irm: org.apache.spark.mllib.linalg.distributed.IndexedRowMatrix = org.apache.spark.mllib.linalg.distributed.IndexedRowMatrix@51cdf498
Распределенная матрица irm
должна иметь 3445 строк, поскольку в исходном кадре данных было столько строк.Но
irm.numRows()
irm.numCols()
res248: Long = 205853916197
res249: Long = 262144
Количество столбцов правильное, но количество строк .... большое.Откуда взялись все эти дополнительные строки?