Нормализовать столбец с помощью Spark - PullRequest
0 голосов
/ 03 мая 2018

У меня есть файл данных с тремя столбцами, и я хочу нормализовать последний столбец, чтобы применить ALS с ML (Spark и Scala), как я могу это сделать?

Вот выдержка из моего Dataframe:

val view_df = spark.createDataFrame(view_RDD, viewSchema)
val viewdd = view_df.withColumn("userIdTemp", view_df("userId").cast(IntegerType)).drop("userId")
                    .withColumnRenamed("userIdTemp", "userId")
                    .withColumn("productIdTemp", view_df("productId").cast(IntegerType)).drop("productId")
                    .withColumnRenamed("productIdTemp", "productId")
                    .withColumn("viewTemp", view_df("view").cast(FloatType)).drop("view")
                    .withColumnRenamed("viewTemp", "view")`

1 Ответ

0 голосов
/ 04 мая 2018

Использование StandardScaler обычно является тем, что вы хотите сделать, когда нужно выполнить любое масштабирование / нормализацию. Однако в этом случае масштабируется только один столбец, и он не относится к типу Vector (но Float). Поскольку StandardScaler работает только на Vectors, сначала можно применить VectorAssembler, но затем Vector необходимо преобразовать в Float после масштабирования.

В этом случае проще было бы сделать это самостоятельно. Сначала получите среднее значение и стандартное отклонение столбца, а затем выполните масштабирование. Это можно сделать в столбце view следующим образом:

val (mean_view, std_view) = viewdd.select(mean("view"), stddev("view"))
  .as[(Double, Double)]
  .first()
viewdd.withColumn("view_scaled", ($"view" - mean_view) / std_view)
...