【问题标题】:Convert a Spark dataframe to a vector将 Spark 数据帧转换为向量
【发布时间】:2017-12-30 08:18:21
【问题描述】:

我想使用 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: 无法将类型 转换为 Vector

stream_df 是一个 Spark 数据框,我想获得一个包含 rawFeatures 和预测类列的数据框。

【问题讨论】:

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


    【解决方案1】:

    使用pyspark.ml.feature.VectorAssembler转换成向量,

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

    另外,您正在使用 Tokenzier,拥有 TF 转换器。所以,我相信您可以使用ML 管道将所有变压器组合在一起。

    这只是一个建议。看看吧。

    【讨论】:

    • 我之前尝试过,我认为问题是 Naive 分类器对象,当我尝试调用 naive_classifier_model.fit(stream_df) 时出现错误,我认为我无法调用 predict 函数VectorAssembler 的输出。是的,最好使用管道,但目前我这样做是为了调试
    • 您在尝试使用 vectorassembler 时遇到了同样的错误?
    • 我也面临同样的问题。即使在将数据框列转换为向量并将其单选出来之后,我仍然得到Cannot convert type <class 'pyspark.sql.dataframe.DataFrame'> into Vector。在我的情况下,我使用来自from pyspark.mllib.statStatistics.chiSqTest()
    【解决方案2】:

    尝试使用浮点数:

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

    【讨论】:

    • 我在尝试时收到以下错误消息:'DataFrame' object has no attribute 'map',我使用结构化流。在编程指南中标记了我们可以应用数据框的map函数
    • 您使用的 Spark 版本是什么?试试这个-prediction= stream_df.rdd.map(lambda p:(float(naive_classifier_model.predict(p.rawFeatures)))) Spark 2 删除了数据帧中的直接映射
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 2019-01-16
    • 2020-07-24
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    相关资源
    最近更新 更多