我这样做如下:
val trainVector = trainingData.
rdd.
map { r => Vectors.dense(
r.getDouble(4),
r.getDouble(37),
r.getAs(_).toDouble(70).toArray,
r.getAs(_).toDouble(76).toArray))
我收到以下错误:
<console>:22: error: missing parameter type for expanded function ((x$1) => r.getAs(x$1).toDouble(70).toArray)
如何将r.getAs(_).toDouble(70).toArray
和r.getAs(_).toDouble(76).toArray
字符串数组更改为array
的{{1}}(我可以在double
函数中使用)?
我尝试了以下操作,但它不能用作字符串数组。
Vectors.dense
答案 0 :(得分:0)
假设您有以下trainingData
。
val trainingData = Seq(Array("1.1")).toDF("doubles")
scala> trainingData.printSchema
root
|-- doubles: array (nullable = true)
| |-- element: string (containsNull = true)
trainingData
包含doubles
个Array[String]
列,您希望将其映射到Array[Double]
。
我要做的是采用单个doubles
列(可能带有其他标识符列)并使用Spark的map
运算符和Scala的map
函数。
val doubles = trainingData.
select("doubles").
as[Array[String]].
map { strs => strs.map(_.toDouble) }
scala> doubles.printSchema
root
|-- value: array (nullable = true)
| |-- element: double (containsNull = false)
但是我认为最终它不会起作用,因为你必须将双打转换为VectorUDF
的{{1}}。