mllib Vector的最大值?

时间:2017-10-18 20:36:02

标签: scala apache-spark apache-spark-mllib

我使用mllib使用Apache Spark创建了一个ML管道。 评估者结果是一个带有“概率”列的DataFrame,它是概率的mllib向量(​​类似于scikit-learn中的predict_proba)。

val rfPredictions = rfModels.bestModel.transform(testing)
val precision = evaluator.evaluate(rfPredictions)

我试过这样的事情没有成功:

rfPredictions.select("probability").map{c => c.getAs[Vector](1).max}
<console>:166: error: value max is not a member of 
org.apache.spark.mllib.linalg.Vector

我想要一个具有此概率最大值的新列。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

Vector 没有max方法。试试toArray.max

rfPredictions.select("probability").map{ c => c.getAs[Vector](1).toArray.max }

argmax

rfPredictions.select("probability").map{ c => {
    val v = c.getAs[Vector](1)
    v(v.argmax)
}}

要将max添加为新列,请定义udf并将其与withColumn函数一起使用:

val max_proba_udf = udf((v: Vector) => v.toArray.max)

rfPredictions.withColumn("max_prob", max_proba_udf($"probability"))

答案 1 :(得分:1)

Spark&gt; 2.0

使用 ml,而不是mllib ,这将在下一步工作:

import org.apache.spark.ml.linalg.DenseVector

just_another_df.select("probability").map{ c => c.getAs[DenseVector](0).toArray.max }

使用udf

import org.apache.spark.ml.linalg.DenseVector

val max_proba_udf = udf((v: DenseVector) => v.toArray.max)

val rfPredictions = just_another_df.withColumn("MAX_PROB", max_proba_udf($"probability"))