Pyspark预测使用kafka直接流

时间:2017-02-04 14:11:36

标签: pyspark spark-streaming

我正在尝试将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 ......

你能告诉我我做错了吗?

感谢您的帮助

1 个答案:

答案 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))