【发布时间】:2016-11-01 18:40:02
【问题描述】:
我刚刚使用 Standard Scaler 为 ML 应用程序标准化我的功能。选择缩放特征后,我想将其转换回双精度数据帧,尽管我的向量的长度是任意的。我知道如何使用
来实现特定的 3 个功能myDF.map{case Row(v: Vector) => (v(0), v(1), v(2))}.toDF("f1", "f2", "f3")
但不适用于任意数量的功能。有没有简单的方法可以做到这一点?
例子:
val testDF = sc.parallelize(List(Vectors.dense(5D, 6D, 7D), Vectors.dense(8D, 9D, 10D), Vectors.dense(11D, 12D, 13D))).map(Tuple1(_)).toDF("scaledFeatures")
val myColumnNames = List("f1", "f2", "f3")
// val finalDF = DataFrame[f1: Double, f2: Double, f3: Double]
编辑
我在创建数据框时发现了如何解压为列名,但仍然无法将向量转换为创建数据框所需的序列:
finalDF = testDF.map{case Row(v: Vector) => v.toArray.toSeq /* <= this errors */}.toDF(List("f1", "f2", "f3"): _*)
【问题讨论】:
标签: scala apache-spark apache-spark-sql apache-spark-ml