Как конфертировать из org.apache.spark.mllib.linalg.Matrix
в RDD[org.apache.spark.mllib.linalg.Vector]
в Spark?Как преобразовать матрицу в RDD [Vector] in spark
Матрица создается из SVD, и я использую результаты SVD для анализа кластеризации.
Как конфертировать из org.apache.spark.mllib.linalg.Matrix
в RDD[org.apache.spark.mllib.linalg.Vector]
в Spark?Как преобразовать матрицу в RDD [Vector] in spark
Матрица создается из SVD, и я использую результаты SVD для анализа кластеризации.
MLlib's Matrix
- небольшая локальная матрица. Вероятно, было бы более эффективно анализировать его локально, а не превращать его в RDD.
Во всяком случае, если ваш кластеризация поддерживает только RDD в качестве входных данных, вот как вы можете сделать преобразование:
import org.apache.spark.mllib.linalg._
def toRDD(m: Matrix): RDD[Vector] = {
val columns = m.toArray.grouped(m.numRows)
val rows = columns.toSeq.transpose // Skip this if you want a column-major RDD.
val vectors = rows.map(row => new DenseVector(row.toArray))
sc.parallelize(vectors)
}
Матрица создается из метода svd. Я хочу использовать метод кластера kmeans для поиска кластеров матрицы, но метод kmeans принимает только RDD. –
А, я вижу! Я обновил ответ, чтобы быть менее смешным :). Надеюсь, код работает в любом случае! –
Большое спасибо! Я из области машинного обучения, и я очень новичок в Spark и Scala. С точки зрения машинного обучения, пока они одни и те же, мне все равно, как они хранятся или представлены в памяти. Поэтому мне очень сложно преобразовать одни и те же данные из одного формата в другой. У вас есть мысли о моем опыте? Еще раз спасибо. –
Не могли бы Вы более конкретно о типах? («Вектор» - неизменный вектор Scala (http://www.scala-lang.org/api/current/index.html#scala.collection.immutable.Vector) или Java 'java.util.Vector', или что-то от Python? Как представлена матрица, каков ее тип?) –
@ GáborBakos: Из редактирования Jiang, похоже, мы говорим о «Matrix» и «Vector» MLlib. –