вычесть векторный столбец из скаляра в искре, используя скала - PullRequest
0 голосов
/ 10 октября 2019

Я использовал 20 миллионов наборов данных Movielens, которые содержат файл с именем rating .csv (UserId, MovieId, Rating). Я применил Alternating Least Square (ALS), который дает выходной userId, FeatureVector в 10 файлах паркета. Уменьшение размерности Я хочу сделать нормализацию для FeatureVector с использованием метода z-показателя. Я хочу вычесть вектор (featureVector) из постоянного скаляра 2.484, разделить значение на 1.8305 и сохранить значение в файлах паркета. Колонка функций

val df = sqlContext.read.parquet("file:///usr/local/spark/dataset/model/data/user/part-r-00000-7d55ba81-5761-4e36-b488-7e6214df2a68.snappy.parquet")
sqlContext.sql("select features from df")
df.withColumn("output", "features" -2.484).show(20)

Как вычесть вектор из каждого значения скаляра

1 Ответ

0 голосов
/ 11 октября 2019

если вы хотите вычесть 2.484 из каждого значения вектора, вы можете попробовать его

  import spark.implicits._
  import org.apache.spark.ml.linalg.{DenseVector, Vectors}
  import org.apache.spark.rdd.RDD

  val df = Seq(Vector(1.0,2.0,2.5,3.0,3.5)).toDF("features")

  val rdd: RDD[DenseVector] = df.select('features)
    .rdd
    .map(s => s.getAs[Seq[Double]]("features").toArray)
    .map(s => Vectors.dense(s.map(s => s - 2.3333)).toDense)

  rdd.take(10).foreach(println(_))

output:

[-1.3333,-0.33329999999999993,0.16670000000000007,0.6667000000000001,1.1667]
...