0

我有以下段落,它使用 InterQuartileRange 方法进行了一些异常值检测,奇怪的是它在错误中运行,但 Apache Zeppelin 将其截断以使其有用。

这是代码:

def interQuartileRangeFiltering(df: DataFrame): DataFrame = {
    @tailrec
    def inner(cols: Seq[String], acc: DataFrame): DataFrame = cols match {
      case Nil          => acc
      case column :: xs =>
        val quantiles = acc.stat.approxQuantile(column, Array(0.25, 0.75), 0.0) // TODO: values should come from config
        val q1 = quantiles(0)
        val q3 = quantiles(1)
        val iqr = q1 - q3
        val lowerRange = q1 - 1.5 * iqr
        val upperRange = q3 + 1.5 * iqr
        inner(xs, acc.filter(s"$column < $lowerRange or value > $upperRange"))
    }
    inner(df.columns.toSeq, df)
  }

这是在 Apache Zeppelin 中运行时的错误:

scala.MatchError: WrappedArray(NEAR BAY, ISLAND, NEAR OCEAN, housing_median_age, population, total_bedrooms, <1H OCEAN, median_house_value, longitude, INLAND, latitude, total_rooms, households, median_income) (of class scala.collection.mutable.WrappedArray$ofRef)
  at inner$1(<console>:74)
  at interQuartileRangeFiltering(<console>:85)
  ... 56 elided

我确实已经将 spark 解释器中的相应设置验证为 true:

zeppelin.spark.printREPL输出

关于我的方法有什么问题以及如何让 Apache Zeppelin 打印整个堆栈跟踪以便我找出实际问题的任何想法?

4

0 回答 0