org.apache.spark.sql.AnalysisException:无法从概率中提取值

Posted

技术标签:

【中文标题】org.apache.spark.sql.AnalysisException:无法从概率中提取值【英文标题】:org.apache.spark.sql.AnalysisException: Can't extract value from probability 【发布时间】:2017-09-16 15:44:18 【问题描述】:

我正在使用朴素贝叶斯算法对文章进行分类,并且想访问部分结果的“概率”列:

val Array(trainingDF, testDF) = rawDataDF.randomSplit(Array(0.6, 0.4))
    val ppline = MyUtil.createTrainPpline(rawDataDF)
    val model = ppline.fit(trainingDF)
    val testRes = model.transform(testDF)
    testRes.filter($"probability"(0).as[Double] === 1).show()

int 最后一行,中断

    Exception in thread "main" org.apache.spark.sql.AnalysisException: Can't extract value from probability#133;
            at org.apache.spark.sql.catalyst.expressions.ExtractValue$.apply(complexTypeExtractors.scala:73)
            at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveReferences$$anonfun$apply$9$$anonfun$applyOrElse$5.applyOrElse(Analyzer.scala:616)
            at org.apache.spark.sql.catalyst.analysis.Analyzer$ResolveReferences$$anonfun$apply$9$$anonfun$applyOrElse$5.applyOrElse(Analyzer.scala:608)
            at 

【问题讨论】:

【参考方案1】:

您始终可以获取底层 RDD 并对其进行过滤:

val filteredRes = results.rdd.filter(row => row.getAs[Vector]("probability")(0) == 1)

如果需要,您可以将其转换回dataframe

val df = spark.createDataFrame(filteredRes, results.schema)

【讨论】:

【参考方案2】:

请注意,有几个问题已打开以跟踪此问题:

https://issues.apache.org/jira/browse/SPARK-19653

https://issues.apache.org/jira/browse/SPARK-12806

目前,Vector 不是 Spark SQL API 中的“一等公民”

【讨论】:

以上是关于org.apache.spark.sql.AnalysisException:无法从概率中提取值的主要内容,如果未能解决你的问题,请参考以下文章