Один из подходов заключается в использовании UDF:
import org.apache.spark.sql.functions._
import org.apache.spark.mllib.linalg.DenseVector
val df = Seq(
"-1,-1,12.0,12.0,12.0,12.0,12.0,12.0,12.0,12.0",
"7.0,7.0,7.0,7.0,7.0,7.0,7.0,7.0,7.0,7.0,",
"12.0,10.0,10.0,10.0,12.0,12.0,10.0,10.0,10.0,12.0",
"-1,-1,-1,-1,-1,-1,-1,5.0,9.0,9.0"
).toDF("feature")
def stringToVector = udf ( (s: String) =>
new DenseVector(s.split(",").map(_.toDouble))
)
df.withColumn("feature", stringToVector($"feature")).
show(false)
// +---------------------------------------------------+
// |feature |
// +---------------------------------------------------+
// |[-1.0,-1.0,12.0,12.0,12.0,12.0,12.0,12.0,12.0,12.0]|
// |[7.0,7.0,7.0,7.0,7.0,7.0,7.0,7.0,7.0,7.0] |
// |[12.0,10.0,10.0,10.0,12.0,12.0,10.0,10.0,10.0,12.0]|
// |[-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,-1.0,5.0,9.0,9.0] |
// +---------------------------------------------------+