>

문자열에서 조밀 한 Vector를 만들려고합니다. 그러나 먼저 이중으로 변환해야합니다. 이중 형식으로 가져 오려면 어떻게해야하나요?

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

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

내가 시도했다 :

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

그러나 결과적으로 Null 열이됩니다.

  • 답변 # 1

    한 가지 접근법은 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]   |
    // +---------------------------------------------------+
    
    

  • 답변 # 2

    first, i need to convert to a double. How do i get it in double format?

    당신은 단순히 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)
     .....
     .....
    
    

    답변이 도움이 되길 바랍니다

관련 자료

  • 이전 Wordpress 페이지에 함수 추가
  • 다음 node.js - 로그인 후 Google 로그인 작업이 의도를 유발하지 않습니다