将Spark数据帧转换为Vector

时间:2017-07-24 16:36:22

标签: apache-spark pyspark spark-streaming spark-dataframe

我想使用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和预测类列的数据框。

2 个答案:

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