我试图在Spark2.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)输出如下:输出
但在我读过的所有教程中,“特性”的类型是vector。为什么在我的情况下是udt?
我是不是忘了什么?为什么它不是向量?
可以转换吗?因为我不能用这个udt类型创建LDA模型。
发布于 2018-05-28 13:54:16
这里没有问题。您看到的是Databricks显示函数的实现细节。
在内部,o.a.s.ml.linalg.Vector和o.a.s.mllib.linalg.Vector都不是本机在Dataset API中表示的,而是使用UDTs (UserDefinedTypes)。因此输出。
您可以在理解VectorAssembler的输出--火花中找到所有字段的确切含义。
https://stackoverflow.com/questions/50567836
复制相似问题