我有下一个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
答案 0 :(得分:1)
您的udf
被错误地声明了。你应该写如下:
val toFloat = udf((line: Seq[Double]) => line.map(_.toFloat))