Spark流:使用随机森林进行反序列化的时间很大

问题描述

我有一个spark程序,它通过ML模型(两个随机森林的集合)处理来自Kafka的数据流。我的整体RF每隔几批更新一次,添加(在一个目录林中)并替换(在另一个目录林中)决策树。

问题在于,由于任务反序列化时间,分类的处理时间非常长,我认为这是不合理的方式(根据整体模型中树木的数量)。


更具体地说:我正在使用Spark v1.6.1和Mllib RandomForestModel。 我通过训练RandomForestModel的一个实例,然后将其树添加到更新森林的数组中,来“手动”更新第一个RF。 而且,由于后者不具备返回一类概率的方法,因此我将其重写为以下内容

var predictProba = udf((v: Vector) => {
    // map data to prediction
    val tree_predictions = forest.trees.map(tree => tree.predict(v))
    // out
    scalarProduct(tree_predictions,tree_weights) // <-- this is a basic scalar product
})

def classify(df: DataFrame): DataFrame = {
    if (counter > 0) {
        // output: create new columns with predictions
        df.withColumn("de_pred_proba",predictProba(df("features")))
    }
    else {
        println(":: rf :: model is not tuned")
        // output: if forest is empty returns column of default value -1.0
        df.withColumn("de_pred_proba",lit(-1.0))
    }
}

拥有300/400棵树并持续中位任务反序列化时间为0.1s(在本地测试中)的持续30s的分类真的很正常吗? 如何加快速度?

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)