【问题标题】:Spark: Override library methodSpark:覆盖库方法
【发布时间】:2016-04-17 23:24:55
【问题描述】:

我想对spark.ml.classification.LogisticRegression 的scala 代码进行一些修改,而不必重新构建整个Spark。 因为我们可以将 jar 文件附加到 spark-submit 或 pySpark 的执行中。是否可以编译 LogisticRegression.java 的修改副本并覆盖 Spark 的默认方法,或者至少创建新方法?谢谢。

【问题讨论】:

    标签: scala apache-spark machine-learning pyspark data-science


    【解决方案1】:

    创建一个扩展org.apache.spark.ml.classification.LogisticRegression 的新类,并在不修改源代码的情况下覆盖相应的方法应该可以工作。

    class CustomLogisticRegression
      extends
        LogisticRegression {
      override def toString(): String = "This is overridden Logistic Regression Class"
    }
    

    使用新的 CustomLogisticRegression 类运行逻辑回归

    val data = sqlCtx.createDataFrame(MLUtils.loadLibSVMFile(sc, "/opt/spark/spark-1.5.2-bin-hadoop2.6/data/mllib/sample_libsvm_data.txt"))
    
    val customLR = new CustomLogisticRegression()
      .setMaxIter(10)
      .setRegParam(0.3)
      .setElasticNetParam(0.8)
    
    val customLRModel = customLR.fit(data)
    
    val originalLR = new LogisticRegression()
      .setMaxIter(10)
      .setRegParam(0.3)
      .setElasticNetParam(0.8)
    
    val originalLRModel = originalLR.fit(data)
    
    // Print the intercept for logistic regression
    println(s"Custom Class's Intercept: ${customLRModel.intercept}")
    println(s"Original Class's Intercept: ${originalLRModel.intercept}")
    println(customLR.toString())
    println(originalLR.toString())
    

    输出:

    Custom Class's Intercept: 0.22456315961250317
    Original Class's Intercept: 0.22456315961250317
    This is overridden Logistic Regression Class
    logreg_1cd811a145d7
    

    【讨论】:

    • 非常感谢,这真的很有帮助!
    • 如果 LogisticRegression 已经创建,我必须从 LogisticRegression 转换为 CustomLogisticRegression 怎么办?
    猜你喜欢
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多