scala - Spark : Override library method

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

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

最佳答案

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

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

使用新的 CustomLogisticRegression 类运行 Logistic 回归

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

关于scala - Spark : Override library method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36683310/

相关文章:

scala - 如何使用 orElse 组合返回 Option 的函数?

scala - Scala 案例类可以排除 setter 吗?

list - Scala 整数列表列表

javascript - 是否可以在 ml5.js 中隐藏视频但保留手部姿势点?

machine-learning - 有没有一种方法可以使用带有分类变量的决策树而无需进行单热编码?

python - 如何提高简单神经网络的速度?

eclipse - 是否有一种无问题的方法可以在集成良好的 Eclipse 中运行 Scala 2.7.7 单元测试?

apache-spark - 如何创建与远程Spark服务器的连接并从运行在本地计算机上的ipython读取数据?

java - 访问空数组或空数组时出现 Spark 错误

java - OrcRelation不可分配给HadoopFsRelation