Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Can';t将Spark ML库中的向量用于数据帧_Apache Spark_Apache Spark Sql_Apache Spark Mllib - Fatal编程技术网

Apache spark Can';t将Spark ML库中的向量用于数据帧

Apache spark Can';t将Spark ML库中的向量用于数据帧,apache-spark,apache-spark-sql,apache-spark-mllib,Apache Spark,Apache Spark Sql,Apache Spark Mllib,当我尝试使用返回向量对象的UDF时,Spark抛出以下异常: Cause: java.lang.UnsupportedOperationException: Not supported DataType: org.apache.spark.mllib.linalg.VectorUDT@f71b0bce 如何在自定义项中使用向量?Spark版本是1.5.1 UPD val dataFrame: DataFrame = sqlContext.createDataFrame(Seq( (0, 1

当我尝试使用返回向量对象的UDF时,Spark抛出以下异常:

Cause: java.lang.UnsupportedOperationException: Not supported DataType: org.apache.spark.mllib.linalg.VectorUDT@f71b0bce
如何在自定义项中使用向量?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
步骤:

数据帧
.groupBy($“键”)
.agg(平均($“a”)。别名(“a”)、平均($“b”)。别名(“b”))
。选择($“键”,someUdf($“a”,$“b”))

谢谢您的回复。如果我将Vectors.dense()更改为I.e.Array(),同样的代码也可以工作。我知道。这似乎是一个特定于
agg
VectorUDT
计算列组合的问题。您的示例适用于我。再次感谢。但我认为这种行为很奇怪。如果我使用一些基元类型或数组,则
someUdf
agg
方法中运行良好。有人能解释为什么会发生这种情况吗?
Vector
的问题是它不是本机的Spark SQL类型。它实现为用户定义的类型(因此
VectorUDT
),具有相当复杂的表示形式。我猜有人并没有像这样预测用例:)但我不得不承认这是令人困惑的。