2016-10-10 61 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) 

我尝试目前转换的doubleArray数据框内部的FloatArray 。我用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