【问题标题】:org.apache.spark.sql.AnalysisException: Can't extract value from probabilityorg.apache.spark.sql.AnalysisException:无法从概率中提取值
【发布时间】: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 

【问题讨论】:

    标签: scala apache-spark dataframe machine-learning naivebayes


    【解决方案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 中的“一等公民”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-13
        • 1970-01-01
        • 1970-01-01
        • 2021-01-19
        • 1970-01-01
        • 2018-04-04
        • 2016-10-03
        相关资源
        最近更新 更多