Spark ML管道模型的转换方法的异常处理

时间:2018-07-24 15:33:08

标签: apache-spark error-handling pyspark spark-streaming apache-spark-ml

我正在实现一个Spark Streaming + ML应用程序。数据以json格式出现在Kafka主题中。 Spark Kafka连接器从Kafka主题读取数据为DStream。经过几个预处理步骤后,将输入DStream转换为功能DStream,并将其输入到Spark ML管道模型中。该代码示例说明了DStream功能如何与管道模型进行交互。

prediction_stream = feature_stream.transform(lambda rdd: predict_rdd(rdd, pipeline_model)

def predict_rdd(rdd, pipeline_model):
    if(rdd is not None) and (not rdd.isEmpty()):
        try:
            df = rdd.toDF()
            predictions = pipeline_model.transform(df)
            return predictions.rdd
        except Exception as e:
            print("Unable to make predictions")
            return None
     else:
          return None

问题来了。如果pipeline_model.transform(df)由于df的某些行中的某些数据问题而失败,则try ... except块将无法捕获该异常,因为该异常是在执行程序中引发的。结果,异常会冒泡到Spark并终止流应用程序。

我希望以某种方式捕获异常,以使流应用程序不会终止并继续处理传入的数据。有可能吗?

我知道一种解决方案可能是在预处理步骤中进行更彻底的数据验证。但是,为防止意外情况发生,应对管道模型的转换方法进行某种错误处理。

0 个答案:

没有答案