我有下面的段落,使用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.printREPLOutput
我的方法有什么问题吗?如何让Apache Zeppelin打印整个堆栈跟踪,以便我可以找出实际问题是什么?
1条答案
按热度按时间sdnqo3pr1#
作为一种解决方法,您可以通过下一个片段查看完整的堆栈跟踪:
您也可以使用try/catch Package 代码来执行相同的操作。