Spark CountVectorizer return udt 而不是矢量
Spark CountVectorizer return udt instead of vector
我尝试为 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
但是在我看过的所有教程中,"features"的类型都是vector。
为什么在我的情况下是 udt ?
我是不是忘记了什么?为什么它不是向量?
可以转换吗?因为我无法使用此 udt 类型创建 LDA 模型。
这里没有问题。你看到的,是Databricks展示功能的实现细节。
在内部,o.a.s.ml.linalg.Vector
和 o.a.s.mllib.linalg.Vector
都没有在 Dataset
API 中本地表示,而是使用 UDT
s(UserDefinedTypes
).因此输出。
您可以在
中找到所有字段的确切含义
我尝试为 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
但是在我看过的所有教程中,"features"的类型都是vector。 为什么在我的情况下是 udt ?
我是不是忘记了什么?为什么它不是向量?
可以转换吗?因为我无法使用此 udt 类型创建 LDA 模型。
这里没有问题。你看到的,是Databricks展示功能的实现细节。
在内部,o.a.s.ml.linalg.Vector
和 o.a.s.mllib.linalg.Vector
都没有在 Dataset
API 中本地表示,而是使用 UDT
s(UserDefinedTypes
).因此输出。
您可以在