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:无法从概率中提取值的主要内容,如果未能解决你的问题,请参考以下文章