如何在流式查询中使用MLlib模型(“字段“功能”不存在失败。”)?

时间:2019-11-07 09:55:09

标签: python apache-spark pyspark-sql apache-spark-mllib spark-structured-streaming

我正在尝试使用保存的Mllib模型来预测实时流数据的情绪。

我尝试了所有发现的建议,但仍然出现错误。 当前错误:字段“功能”不存在。

训练数据的模式是

root
 |-- label: double (nullable = true)
 |-- words: array (nullable = true)
 |    |-- element: string (containsNull = true)
 |-- features: vector (nullable = true)

lines = spark\
        .readStream\
        .format("kafka")\
        .option("kafka.bootstrap.servers", bootstrapServers)\
        .option("subscribe", topics)\
        .load()\
        .selectExpr("CAST(value AS STRING)")
    #<class 'pyspark.sql.dataframe.DataFrame'>

read_data=lines.selectExpr("CAST(value AS STRING) as text")

model_nb = NaiveBayesModel.load("./myNBmodel")

prediction = model_nb.transform(read_data)

print(prediction.schema)

query1 = prediction.writeStream \
            .outputMode("update") \
            .foreach(process_row) \
            .start()

query1.awaitTermination()

prediction = model_nb.transform(read_data)
  

:Py4JJavaError:调用o133.transform时发生错误。   :java.lang.IllegalArgumentException:字段“功能”不存在。   可用字段:文本

被绑住的数据不需要功能就可以进行预测,对吧?

1 个答案:

答案 0 :(得分:0)

  

被绑住的数据不需要功能就可以进行预测,对吧?

那是相当不正确的。

原始数据必须“具有特征”,这就是为什么您应该使用Spark MLlib的ML Pipelines,所以由Spark来完成此“特征化”而不是您:

  

机器学习管道提供了一组统一的基于API的高级API,可帮助用户创建和调整实用的机器学习管道。

     

MLlib标准化了用于机器学习算法的API,从而使将多种算法组合到单个管道或工作流程中变得更加容易。