4 scala normalize apache-spark spark-dataframe apache-spark-ml
我有一个包含三列的数据文件,我想规范化最后一列以将 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")`
Run Code Online (Sandbox Code Playgroud)
StandardScaler当需要完成任何缩放/归一化时,通常使用。但是,在这种情况下,只有一列要缩放,并且它不是Vector类型(但是Float)。由于StandardScaler只对 有效Vectors,因此VectorAssembler可以先应用a ,但Vector需要Float在缩放后重新转换为 a 。
在这种情况下,更简单的方法是自己做。首先得到列的均值和标准差,然后进行缩放。它可以在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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8343 次 |
| 最近记录: |