Spark-Scala конвертирует строку чисел в двойную - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь сделать плотный вектор из строки. Но сначала мне нужно конвертировать в двойную. Как мне получить его в двойном формате?

[-- feature: string (nullable = false)]

https://i.stack.imgur.com/u1kWz.png

Я пробовал:

val new_col = df.withColumn("feature", df("feature").cast(DoubleType))

Но это приводит к появлению столбца Null.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Во-первых, мне нужно преобразовать в двойной. Как мне получить его в двойном формате?

Вы можете просто использовать split встроенную функцию и привести к Array[Double], как показано ниже

import org.apache.spark.sql.functions._
val new_col = df.withColumn("feature", split(df("feature"), ",").cast("array<double>"))

что должно дать вам

root
 .....
 .....
 |-- feature: array (nullable = true)
 |    |-- element: double (containsNull = true)
 .....
 .....

Надеюсь, ответ полезен

0 голосов
/ 06 июля 2018

Один из подходов заключается в использовании 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]   |
// +---------------------------------------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...