2017-07-24 129 views
0

我想使用Naive分類器模型來預測Spark dataframe的輸出類,我使用Spark 2.1.0的結構化流式傳輸功能。 當我嘗試這樣做:將Spark數據幀轉換爲Vector

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

使用pyspark.ml.feature.VectorAssembler轉變爲載體,

from pyspark.ml.feature import VectorAssembler 
vecAssembler = VectorAssembler(inputCols=['rawFeatures'], outputCol="features") 
stream_df = vecAssembler.transform(featurizedData) 

此外,您使用的Tokenzier,Hasing TF變壓器爲好。所以,我相信你可以使用ML管道將所有transfomers整合在一起。只是一個建議,看看。

+0

我想在那之前,我認爲這個問題是樸素分類器對象,當我嘗試調用'naive_classifier_model.fit(stream_df)'我得到了一個錯誤,我認爲我無法用'VectorAssembler'的輸出調用'predict'函數。是的,最好使用管道,但目前我這樣做調試 –

+0

你有vectorassembler嘗試同樣的錯誤嗎? – Suresh

0

嘗試使用浮動:

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)))) 
+0

當我嘗試:'DataFrame'對象沒有屬性'map'時,我收到以下錯誤消息,我使用結構化流。在編程指南中,它標明我們可以應用數據幀的「地圖」功能 –

+0

您使用的是什麼Spark版本?試試這個 - 'prediction = stream_df.rdd.map(lambda p:(float(naive_classifier_model.predict(p.rawFeatures))))'Spark 2從數據框移除直接映射 –