【问题标题】:Spark CountVectorizer return udt instead of vector [duplicate]Spark CountVectorizer返回udt而不是向量[重复]
【发布时间】:2018-05-28 13:43:36
【问题描述】:

我尝试为 Spark 2.3.0 中的 LDA 分析创建一个令牌计数向量。我遵循了一些教程,每次他们使用 CountVectorizer 轻松地将字符串数组转换为向量。

我在我的 Databricks 笔记本上运行这个简短的示例:

import org.apache.spark.ml.feature.CountVectorizer

val testW = Seq(
  (8, Array("Zara", "Nuha", "Ayan", "markle")),
  (9, Array("fdas", "test", "Ayan", "markle")),
  (10, Array("qwertzu", "test", "Ayan", "fdaf"))
  ).toDF("id", "filtered")

// Set params for CountVectorizer
val vectorizer = new CountVectorizer()
  .setInputCol("filtered")
  .setOutputCol("features")
  .setVocabSize(5) 
  .setMinDF(2) 
  .fit(testW)

// Create vector of token counts
val articlesCountVector = vectorizer.transform(testW).select("id", "features")
display(articlesCountVector)

输出如下: output

但在我读过的所有教程中,“特征”的类型是矢量。 为什么在我的情况下是 udt

我是不是忘记了什么?为什么不是向量?

可以转换吗?因为我无法使用这种 udt 类型创建 LDA 模型。

【问题讨论】:

  • 试试articlesCountVector.printSchema()你应该会看到向量

标签: apache-spark apache-spark-sql apache-spark-mllib


【解决方案1】:

这里没有问题。你看到的是Databricks显示功能的实现细节。

在内部,o.a.s.ml.linalg.Vectoro.a.s.mllib.linalg.Vector 都没有在 Dataset API 中原生表示,而是使用 UDTs (UserDefinedTypes)。因此输出。

您可以在Understanding Output of VectorAssembler --- Spark中找到所有字段的确切含义

【讨论】:

    猜你喜欢
    • 2018-11-07
    • 2020-10-23
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 2012-09-02
    • 2018-06-25
    相关资源
    最近更新 更多