2016-04-17 3 views
0

Я хотел бы внести некоторые изменения в код scala spark.ml.classification.LogisticRegression, не перестраивая всю искру. Поскольку мы можем добавлять файлы jar к исполнению либо spark-submit, либо pySpark. Возможно ли скомпилировать измененную копию LogisticRegression.java и переопределить методы Spark по умолчанию или, по крайней мере, создать новые? Благодарю.Искры: метод переопределения библиотеки

ответ

2

Создание нового класса, расширяющего 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 
+0

Спасибо большое, это очень полезно! –

Смежные вопросы