不能将 Spark ML 库中的 Vector 用于 DataFrame
Can't use Vector from Spark ML Lib for the DataFrame
当我尝试使用 returns Vector 对象的 UDF 时,Spark 抛出以下异常:
Cause: java.lang.UnsupportedOperationException: Not supported DataType: org.apache.spark.mllib.linalg.VectorUDT@f71b0bce
如何在我的 UDF 中使用 Vector? Spark版本是1.5.1.
UPD
val dataFrame: DataFrame = sqlContext.createDataFrame(Seq(
(0, 1, 2),
(0, 3, 4),
(0, 5, 6)
)).toDF("key", "a", "b")
val someUdf = udf {
(a: Double, b: Double) => Vectors.dense(a, b)
}
dataFrame.groupBy(col("key"))
.agg(someUdf(avg("a"), avg("b")))
你的UDF本身没有问题。看起来您遇到了异常,因为您在聚合列的 agg
方法中调用了它。要使其正常工作,您只需将其推到 agg
步骤之外:
dataFrame
.groupBy($"key")
.agg(avg($"a").alias("a"), avg($"b").alias("b"))
.select($"key", someUdf($"a", $"b"))
当我尝试使用 returns Vector 对象的 UDF 时,Spark 抛出以下异常:
Cause: java.lang.UnsupportedOperationException: Not supported DataType: org.apache.spark.mllib.linalg.VectorUDT@f71b0bce
如何在我的 UDF 中使用 Vector? Spark版本是1.5.1.
UPD
val dataFrame: DataFrame = sqlContext.createDataFrame(Seq(
(0, 1, 2),
(0, 3, 4),
(0, 5, 6)
)).toDF("key", "a", "b")
val someUdf = udf {
(a: Double, b: Double) => Vectors.dense(a, b)
}
dataFrame.groupBy(col("key"))
.agg(someUdf(avg("a"), avg("b")))
你的UDF本身没有问题。看起来您遇到了异常,因为您在聚合列的 agg
方法中调用了它。要使其正常工作,您只需将其推到 agg
步骤之外:
dataFrame
.groupBy($"key")
.agg(avg($"a").alias("a"), avg($"b").alias("b"))
.select($"key", someUdf($"a", $"b"))