apache-spark - Spark CountVectorizer 返回 udt 而不是向量
问题描述
我尝试为 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)
输出如下: 输出
但是在我读过的所有教程中,“特征”的类型是vector。为什么在我的情况下是udt?
我忘了什么吗?为什么它不是向量?
是否可以转换它?因为我无法使用这种 udt 类型创建 LDA 模型。
解决方案
这里没有问题。您看到的是 Databricks 显示功能的实现细节。
在内部,两者o.a.s.ml.linalg.Vector
和都没有在APIo.a.s.mllib.linalg.Vector
中本地表示,并使用s ( )。因此输出。Dataset
UDT
UserDefinedTypes
您可以在理解 VectorAssembler 的输出 --- Spark中找到所有字段的确切含义
推荐阅读
- typescript - 如何在 Ionic 3 的后台按顺序依次上传文件(图像)?
- c# - 在c#中从位图转换为ImageBitmap的问题
- javascript - 带有 typescript 的 create-react-app 将函数编译成非常奇怪的东西
- javascript - 单击按钮后在 GoogleMaps 上选择一个点
- javascript - javascript:如何将变量转换为返回原始值的同名函数
- html - CSS“子”选择器的行为类似于“后代”选择器
- automated-tests - 如何在 puppeteer 中使用 chrome 配置文件
- gettext - 为什么人们使用翻译占位符而不是简单的英语?
- machine-learning - 无法从 jupyter notebook 安装 lightgbm
- java - Java:告诉 JVM 将所有字段/方法视为公共的