2016-08-02 3 views
1

Речь идет о Logistic regression with spark ml (data frames)Преобразование Python в Scala в Spark ML?

Когда я хочу, чтобы изменить код Python в Scala

Python:

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

Scala: (изменено)

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

Я уже проверил stage.isInstanceOf[LogisticRegressionModel], который вернул True. Однако, stage.coefficients имеет сообщение об ошибке. В нем говорится: "value coefficients is not a member of org.apache.spark.ml.Transformer".

Я только проверить сцену, он будет возвращать

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

Почему тип отличается, когда isInstanceOf возвращает истину? Что мне делать? Спасибо

ответ

2

Почему тип отличается, когда isInstanceOf возвращает true?

Ну, Scala является статически типизированным языком и stages является Array[Transformer] поэтому каждый элемент доступ является Transformer. Transformers обычно нет coefficients, отсюда ошибка.

Что мне делать?

Будьте конкретны в отношении типов.

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

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

Спасибо. Я хочу задать еще один вопрос. Он возвращает некоторые. Как я могу преобразовать некоторых в массив? –

+0

Он возвращает опцию [o.a.s.mllib.linalg.Vector] '. Если вы уверены, что существует необходимый этап, вы можете просто использовать 'head' (вместо' headOption'), а 'o.a.s.mllib.linalg.Vector' имеет метод' toArray'. – zero323