You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark Scala 特征向量属性数量统计问题咨询

特征总属性数统计方案

直接取normFeatures列的向量size值即可,该值就是处理后的总属性数量,无需额外统计向量中嵌套在[]、()内的数字。


原理说明

  • 你用到的四个算子中,仅OneHotEncoder、VectorAssembler会影响属性维度,Normalizer不会修改向量维度:
    • StringIndexer仅将字符串分类值映射为整数索引,单列输入还是单列输出,不改变属性数
    • OneHotEncoder默认会将单个分类列转换为N-1维独热向量(N为该列的分类取值总数,删除最后一个维度避免共线性)
    • VectorAssembler会按顺序拼接所有输入的数值列、独热向量列,生成的大向量的size就是所有输入维度的总和
    • Normalizer仅对向量每个维度的数值做L1/L2范数缩放,不会新增或减少维度
  • 向量里()、[]的数字是Spark稀疏向量的存储格式标记,格式为(总维度, [非零维度下标], [非零维度取值]),其中第一个括号内的第一个数字就是向量总维度,下标和取值是为了节省存储的优化设计,不是额外的属性。

实现代码示例

Scala 版本

取单条样本的属性总数

import org.apache.spark.ml.linalg.Vector

val sampleVector = df.select("normFeatures").head.getAs[Vector](0)
val totalAttrCount = sampleVector.size

校验全量数据维度一致性

// 正常处理后所有行维度相同,查询结果仅返回一个值就是总属性数
df.select("normFeatures").as[Vector].map(_.size).distinct.show()

PySpark 版本

取单条样本的属性总数

from pyspark.ml.linalg import Vector

sample_vector = df.select("normFeatures").head()[0]
total_attr_count = sample_vector.size

校验全量数据维度一致性

# 结果仅返回一个值即为统一的总属性数
df.select("normFeatures").rdd.map(lambda row: row[0].size).distinct().collect()

内容的提问来源于stack exchange,提问作者rayqz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:36:02