В соответствии с тем, что я понял из вашего вопроса, вот что вам нужно сделать, чтобы выполнить StandardScaler
в соответствии с вашим IndexedRow
import org.apache.spark.mllib.feature.{StandardScaler, StandardScalerModel}
import org.apache.spark.mllib.linalg.distributed.IndexedRow
import org.apache.spark.mllib.linalg.{Vector, Vectors}
import org.apache.spark.rdd.RDD
val data: RDD[(Int, Int, Double)] = ???
object nCol {
val value: Int = ???
}
val data_mapped: RDD[(Int, (Int, Double))] =
data.map({ case (id, col, score) => (id, (col, score)) })
val data_mapped_grouped: RDD[(Int, Iterable[(Int, Double)])] =
data_mapped.groupByKey
val indexed_rows: RDD[IndexedRow] = data_mapped_grouped.map {
case (id, vals) =>
IndexedRow(id, Vectors.sparse(nCol.value, vals.toSeq))
}
. Вы можете получить свои векторы из вашего IndexedRow с простым отображением
val vectors: RDD[Vector] = indexed_rows.map { case i: IndexedRow => i.vector }
Теперь, когда у вас есть RDD [Vector], вы можете попробовать поместить его в свой сканер.
val scaler: StandardScalerModel = new StandardScaler().fit(vectors)
Надеюсь, это поможет!
Попробуйте это:
rsync -rv --delete --include=foo.txt '--exclude=*' /home/user/ user@remote:/home/user/
(настоятельно рекомендуют выполнение с --dry-run
сначала для тестирования его), Хотя это походит, было бы легче использовать ssh...
ssh user@remote "rm /home/user/foo.txt"