2016-10-10 18 views
0

私は次のデータフレームを持っている:UDF関数、スカラ座

df.show() 

+---------------+----+ 
|    x| num| 
+---------------+----+ 
|[0.1, 0.2, 0.3]| 0| 
|[0.3, 0.1, 0.1]| 1| 
|[0.2, 0.1, 0.2]| 2| 
+---------------+----+ 

このデータフレームは、列のデータ型に従っています

df.printSchema 
root 
|-- x: array (nullable = true) 
| |-- element: double (containsNull = true) 
|-- num: long (nullable = true) 

私はFloatArrayにデータフレームの内側に、現在DoubleArrayを変換しよう。私はudfの次の声明でそれを行います:

val toFloat = udf[(val line: Seq[Double]) => line.map(_.toFloat)] 
val test = df.withColumn("testX", toFloat(df("x"))) 

このコードは現在動作していません。誰も私のソリューションを共有することができますどのように配列を変更するDataFrameのinseide型?私が欲しいもの

は次のとおりです。

df.printSchema 
root 
|-- x: array (nullable = true) 
| |-- element: float (containsNull = true) 
|-- num: long (nullable = true) 

この質問は、質問How tho change the simple DataType in Spark SQL's DataFrame

答えて

1

あなたudfに基づいていますが誤って宣言されています。次のように記述してください:

val toFloat = udf((line: Seq[Double]) => line.map(_.toFloat)) 
+0

@cheseaus、ありがとうございます。私はvalが冗長で括弧が偽であることを知らなかった。私は今udfの構文と使い方を学びます – Guforu