sparkUDF入参是Array[Float]类型,转换为 Spark 中的 org.apache.spark.ml.linalg.Vector
类型,可以编写一个自定义的 Spark UDF 来完成这个转换。以下是一个示例代码:
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.sql.functions.udf
// 示例数据
val floatArray: Array[Float] = Array(1.0f, 2.0f, 3.0f)
// 自定义UDF将Array[Float]转换为Vectors.dense
val arrayToVectorUDF = udf { (data: Seq[Float]) =>
Vectors.dense(data.map(_.toDouble).toArray)
}
// 将数组转换为DataFrame并应用UDF
val df = Seq(floatArray).toDF("arrayColumn")
val result = df.withColumn("vectorColumn", arrayToVectorUDF(col("arrayColumn")))
result.show(truncate = false)
这段代码首先定义了一个名为 arrayToVectorUDF
的自定义UDF。这个UDF接受类型为 Seq[Float]
的输入参数,并将其转换为 Vectors.dense
类型。
接着,代码将 floatArray
转换为一个包含一列的 DataFrame,并使用定义的 UDF 将数组列转换为向量列。最后,使用 show()
方法展示转换后的结果。