2016-08-02 6 views
1

Die Frage ist, über Logistic regression with spark ml (data frames)Konvertieren von Python zu Scala in Spark ML?

Wenn ich den Code Python zu Scala

Python ändern wollen:

[stage.coefficients for stage in model.stages 
    if isinstance(stage, LogisticRegressionModel)] 

Scala: (geändert)

for (stage<-model.stages){ 
     if(stage.isInstanceOf[LogisticRegressionModel]{ 
      val a = Array(stage.coefficients) 
    }} 

habe ich bereits überprüft stage.isInstanceOf[LogisticRegressionModel], die die True zurückgegeben. stage.coefficients hat jedoch die Fehlermeldung. Es sagt "value coefficients is not a member of org.apache.spark.ml.Transformer".

ich die Bühne nur überprüfen, wird es

org.apache.spark.ml.Transformer= logreg 382456482 

zurückkehren Warum die Art unterschiedlich ist, wenn die isInstanceOf true zurückgibt? Was soll ich machen? Danke

Antwort

2

Warum ist der Typ anders, wenn das isInstanceOf true zurückgibt?

Nun, ist Scala eine statisch typisierte Sprache und stages ist ein Array[Transformer], so dass jedes Element, das Sie Zugriff auf eine Transformer ist. Transformers haben im Allgemeinen keine coefficients, daher der Fehler.

Was soll ich tun?

Spezifische über die Typen.

import org.apache.spark.ml.classification.LogisticRegressionModel 

model.stages.collect { 
    case lr: LogisticRegressionModel => lr.coefficients 
}.headOption 
+0

Danke. Ich möchte noch eine Frage stellen. Es gibt einige zurück. Wie kann ich einige in Arrays konvertieren? –

+0

Es gibt eine 'Option [o.a.s.mllib.linalg.Vector]' zurück. Wenn Sie sicher sind, dass die erforderliche Stufe existiert, können Sie einfach 'head' (anstelle von' headOption') verwenden und 'o.a.s.mllib.linalg.Vector' hat' toArray' Methode. – zero323

Verwandte Themen