用于DataType转换的udf函数,Scala

时间:2016-10-10 14:21:26

标签: scala apache-spark dataframe types

我有下一个DataFrame:

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|
+---------------+----+

此DataFrame遵循列的数据类型:

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

我尝试将当前DataFrame内的DoubleArray转换为FloatArray。我是用udf的下一个声明做的:

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

此代码目前无效。任何人都可以与我分享如何更改DataFrame数组类型的解决方案吗?

我想要的是:

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 个答案:

答案 0 :(得分:1)

您的udf被错误地声明了。你应该写如下:

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