无法使用Spark ML Lib中的Vector作为DataFrame

时间:2015-10-07 15:17:00

标签: apache-spark apache-spark-sql apache-spark-mllib

当我尝试使用返回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")))

1 个答案:

答案 0 :(得分:1)

您的UDF本身没有任何问题。看起来你得到一个异常,因为你在聚合列的agg方法中调用它。要使其工作,您只需将其推到agg步骤:

之外
dataFrame
  .groupBy($"key")
  .agg(avg($"a").alias("a"), avg($"b").alias("b"))
  .select($"key", someUdf($"a", $"b"))