duc*_*ito 4 scala apache-spark
我编写了以下代码,以便将SQL DataFrame转换df为RDD[LabeledPoint]:
val targetInd = df.columns.indexOf("myTarget")
val ignored = List("myTarget")
val featInd = df.columns.diff(ignored).map(df.columns.indexOf(_))
df.printSchema
val dfLP = df.rdd.map(r => LabeledPoint(
r.getDouble(targetInd),
Vectors.dense(featInd.map(r.getDouble(_)).toArray)
))
Run Code Online (Sandbox Code Playgroud)
模式如下所示:
root
|-- myTarget: long (nullable = true)
|-- var1: long (nullable = true)
|-- var2: double (nullable = true)
Run Code Online (Sandbox Code Playgroud)
当我运行时dfLP.foreach(l => l.label),会发生以下错误:
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Double
如何将标签转换成两倍?我希望其他功能可能都是两倍或更长,不是吗?如果不正确,那么我还需要将其余功能转换成两倍。
您可以尝试在映射之前将所有列转换为两倍。使用foldLeft应该可以解决问题:
df.columns.foldLeft(df) {
(newDF, colName) => newDF.withColumn(colName, df(colName).cast("double"))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
942 次 |
| 最近记录: |