微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。