【发布时间】:2020-03-08 05:46:53
【问题描述】:
为了处理 RDD 操作上的 Spark 异常,我可以使用以下方法和额外的 exceptions 列:
val df: DataFrame = ...
val rddWithExcep = df.rdd.map { row: Row =>
val memberIdStr = row.getAs[String]("member_id")
val memberIdInt = Try(memberIdStr.toInt) match {
case Success(integer) => List(integer, null)
case Failure(ex) => List(null, ex.toString)
}
Row.fromSeq(row.toSeq.toList ++ memberIdInt)
}
val castWithExceptionSchema = StructType(df.schema.fields ++ Array(StructField("member_id_int", IntegerType, true)
, StructField("exceptions", StringType, true)))
val castExcepDf = sparkSession.sqlContext.createDataFrame(rddWithExcep, castWithExceptionSchema)
castExcepDf.printSchema()
castExcepDf.show()
是否可以在 Spark SQL 上处理此类异常?例如,目前如果出现任何错误,Spark SQL 会简单地返回null 值并隐藏错误。
例如除以 0 将导致 null 值而不是错误..
在我看来 - 这是 Spark SQL 中的一个非常严重的问题,因为它可以简单地产生您甚至不会注意到的意外/错误数据。
是否可以覆盖此行为并让 Spark 失败并出现适当的详细异常?
【问题讨论】:
标签: scala dataframe apache-spark error-handling apache-spark-sql