理解Spark SQL中向量列的表示

时间:2016-07-07 01:37:23

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

在我使用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])]

我不确定这些数字的含义是什么,也无法理解这个转换后的数据集。关于这个输出意味着什么的一些澄清会很棒!

1 个答案:

答案 0 :(得分:9)

此输出并非特定于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位
  • 1.0在第9位

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