2016-10-26 19 views
0

mllibモデルはどこかで訓練されていて、どこか別の場所に送信したいと思っています。私はカフカのトピックを通してそれを送信しようとすると、このApache Kafkaはトピックを通して文字列以外のメッセージを送信できますか?

よう
val model = LogisticRegressionModel.load(sc, "/PATH/To/Model")  
val producer=new Producer[String, LogisticRegressionModel](config) 
val data=new KeyedMessage[String, LogisticRegressionModel(topic2,key,model) 
producer.send(data) 
producer.close() 

私はこのようなエラーが発生します:だから

org.apache.spark.mllib.classification.LogisticRegressionModel cannot be cast to java.lang.String 

、それは可能カフカが話題を通じて文字列以外のメッセージを送信するためのものです?

+1

はい。しかし、日付の種類とシリアライザを調整する必要があります。とにかくKafkaは内部的にバイト配列を処理し、実際のキーと値のデータ型には無関心です。プロデューサの設定で、適切なシリアライザ値タイプを設定しましたか。 –

+0

@ MatthiasJ.Saxあなたの素早い答えをありがとう!私は以前は 'serializer.class'が' kafka.serializer.StringEncoder'であることを認識していませんでしたが、これを変更する必要がありますか? –

答えて

0

カフカのプロデューサーを使用して、カフカのトピックに文字列以外のメッセージを送信できます。 0.9.0より、Scala ClientではなくJava Clientを使用する方が良いでしょう。

Propertiesに正しいKey, Value serializerを指定するだけです。

props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); 
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); 
+0

ありがとう!私はあなたを持っていますが、この場合、mllibモデルをシリアライズできるシリアライザが必要です。ライブラリにシリアライザがないと思われます。それはできません。 –

+0

@ ZefuHu:使用できるシリアライザが見つからない場合は、カスタムシリアライザを作成できます。 – Shankar

+0

ありがとう! –

関連する問題