了解 Spark 中矢量列的表示 SQL

Understanding Representation of Vector Column in Spark SQL

在我使用 VectorAssembler() 来整合一些 OneHotEncoded 分类特征之前......我的数据框看起来像这样:

|  Numerical|  HotEncoded1|   HotEncoded2
|  14460.0|    (44,[5],[1.0])|     (3,[0],[1.0])|
|  14460.0|    (44,[9],[1.0])|     (3,[0],[1.0])|
|  15181.0|    (44,[1],[1.0])|     (3,[0],[1.0])|

第一列是数字列,其他两列代表 OneHotEncoded 分类特征的转换数据集。应用 VectorAssembler() 后,我的输出变为:

[(48,[0,1,9],[14460.0,1.0,1.0])]
[(48,[0,3,25],[12827.0,1.0,1.0])]
[(48,[0,1,18],[12828.0,1.0,1.0])]

我不确定这些数字的含义,也无法理解这个转换后的数据集。对这个输出的含义进行一些澄清会很棒!

此输出不特定于 VectorAssembler。它只是 o.a.s.ml.linalg.SparseVector(Spark < 2.0 中的 o.a.s.mllib.linalg.SparseVector)的字符串表示形式,其中:

  • 表示向量长度的前导数字
  • 括号中的第一组数字是非零索引列表
  • 括号中的第二组数字是索引对应的值列表

所以(48,[0,1,9],[14460.0,1.0,1.0])表示一个长度为48的向量,包含三个非零项:

  • 14460.0 第0位
  • 1.0 在第一位
  • 1.0 第 9 位

几乎相同的描述适用于 HotEncoded1HotEncoded2,而 Numerical 只是一个标量。在没有看到 和构造函数的情况下,不可能知道太多,但编码变量应该有 44 和 3 或 45 和 4 级别(取决于 dropLast 参数)。