我正在尝试将kafka数据拉入火花流,从HDFS加载已经构建的模型,然后使用kafka消息进行预测。
我尝试了几种方法,但由于TypeError,我被困在model.predict:无法将类型转换为Vector
从kafka收到的数据是浮动逗号分隔。
这是我的代码:
sc = SparkContext(appName="PythonStreamingKafkaForecast")
ssc = StreamingContext(sc, 10)
# Create stream to get kafka messages
directKafkaStream = KafkaUtils.createDirectStream(ssc, ["my_topic"], {"metadata.broker.list": "kafka_ip"})
features = directKafkaStream.foreachRDD(lambda rdd: rdd.map(lambda s: Vectors.dense(s[1].split(","))))
model = LinearRegressionModel.load(sc, "hdfs://hadoop_ip/model.model")
#Predict
predicted = model.predict(features)
我也试过这个:
lines = directKafkaStream.map(lambda x: x[1])
features = lines.map(lambda data: Vectors.dense([float(c) for c in data.split(',')]))
但这一次,功能属于TransformedStream类型,不适用于preidctions ......
你能告诉我我做错了吗?
感谢您的帮助
答案 0 :(得分:0)
好的,问题是尝试从kafka读取数据,即使主题是空的。
这解决了我的问题:
def predict(rdd):
count = rdd.count()
if (count > 0):
features = rdd.map(lambda s: Vectors.dense(s[1].split(",")))
return features
else:
print("No data received")
directKafkaStream.foreachRDD(lambda rdd: predict(rdd))