我想使用Naive分类器模型预测Spark dataframe
的输出类,我使用Spark 2.1.0的结构化流功能。
当我尝试这样做时:
tokenizer = Tokenizer(inputCol="message",outputCol="logTokenize")
tokenizeData = tokenizer.transform(stream_df)
hashingTF = HashingTF(inputCol="logTokenize", outputCol="rawFeatures", numFeatures = 1000)
featurizedData = hashingTF.transform(tokenizeData)
stream_df = featurizedData.select("rawFeatures")
path = "/tmp/NaiveClassifier"
naive_classifier_model = NaiveBayesModel.load(spark.sparkContext,path)
predictions = naive_classifier_model.predict(stream_df)
我收到以下错误消息:
TypeError: Cannot convert type <class 'pyspark.sql.dataframe.DataFrame'> into Vector
stream_df
是一个Spark数据框,我希望获得一个包含rawFeatures
和预测类列的数据框。
答案 0 :(得分:0)
使用pyspark.ml.feature.VectorAssembler转换为vector,
from pyspark.ml.feature import VectorAssembler
vecAssembler = VectorAssembler(inputCols=['rawFeatures'], outputCol="features")
stream_df = vecAssembler.transform(featurizedData)
此外,您还使用了Tokenzier,Hasing TF变换器。因此,我相信您可以使用ML管道将所有变形器组合在一起。只是一个建议,看看。
答案 1 :(得分:0)
尝试使用float:
path = "/tmp/NaiveClassifier"
naive_classifier_model = NaiveBayesModel.load(spark.sparkContext,path)
prediction= stream_df.rdd.map(lambda p:(float(naive_classifier_model.predict(p.rawFeatures))))