2016-12-02 4 views
0

MultilayerPerceptronClassificationModel을 설정하고 (자습서와 동일한 방식으로) 연습 했으므로 다음 번에 일부 데이터를 분류해야하는 신경망을 재사용하기 위해 계속 사용하고 싶습니다. 모델에는 loadsave 메서드가 있으며 파일에서 유지되고 복원됩니다. 그러나 데이터베이스에 모델을 저장 (나중에로드)하는 방법이 있습니까? (제 경우에는 CassandraDB입니다).데이터베이스에 Spark MLlib 모델을 유지하는 방법은 무엇입니까?

답변

1

좋아, 답을 찾았습니다. 이것이 최선의 해결책인지 확신 할 수 없지만 잘 작동합니다.

MultilayerPerceptronClassificationModel (그리고 내가 볼 수있는 한, MLlib 패키지의 모든 모델)은 Serializable 인터페이스를 구현합니다. 그래서 그것은 직렬화/역 직렬화 될 수 ByteArray.

CREATE TABLE models (
    uid TEXT, 
    name TEXT, 
    model BLOB, 

    PRIMARY KEY (uid) 
); 

지금 우리가 DB에 모델을 작성할 수 있습니다 :

def saveModel(model: MultilayerPerceptronClassificationModel) = { 
    val baos = new ByteArrayOutputStream() 
    val oos = new ObjectOutputStream(baos) 

    oos.writeObject(model) 
    oos.flush() 
    oos.close() 

    sc.parallelize(Seq((model.uid, "my-neural-network-model", baos.toByteArray))) 
    .saveToCassandra("mykeyspace", "models", SomeColumns("uid", "name", "model")) 
} 

를 다시 모델을 읽어

def loadModel(): MultilayerPerceptronClassificationModel = { 
    sc.cassandraTable("mykeyspace", "models").map { r => 
    val bis = new ByteArrayInputStream(r.getBytes("model").array()) 
    val ois = new ObjectInputStream(bis) 

    ois.readObject.asInstanceOf[MultilayerPerceptronClassificationModel] 
    }.first() 
} 

의 카산드라 DB에서 모델을 저장하는 테이블을 만들어 보자

관련 문제