news 2026/4/18 14:27:07

Flink ML VectorAssembler 把多列特征“拼”成一个向量列(数值 + 向量都支持)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flink ML VectorAssembler 把多列特征“拼”成一个向量列(数值 + 向量都支持)

1. VectorAssembler 做什么?

给定一组输入列inputCols(每列类型必须是数值Vector),把它们按顺序组合成一个新向量列outputCol

  • 输入可以混合:

    • 单个数值列(Number)
    • DenseVector / SparseVector(Vector)
  • 输出是一个 Vector(通常是稠密或稀疏表示,取决于内部实现与输入组合)

典型用途:

  • StringIndexer -> OneHotEncoder -> VectorAssembler -> LogisticRegression
  • 数值特征 + one-hot 稀疏特征 + embedding 向量 -> VectorAssembler -> 模型

2. 输入列与输出列

输入列(Input Columns)

参数名类型默认值说明
inputColsNumber / Vectornull待拼接的列(可多列)

输出列(Output Columns)

参数名类型默认值说明
outputColVector"output"拼接后的向量列

3. 参数详解(Parameters)

Key默认值必填说明
inputColsnull输入列名数组(顺序很重要)
outputCol"output"输出列名
handleInvalidERROR_INVALID遇到非法值如何处理(如空值/类型不对等)

工程建议:

  • inputCols的顺序决定最终向量的维度排列,一旦上线最好固定,否则训练/预测会对不上。

4. Java 示例逐段解读

示例里把三列拼成一列:

  • vec:DenseVector(2.1, 3.1)(长度 2)
  • num:数值 1.0(长度 1)
  • sparseVec:SparseVector(size=5, …)(长度 5)

最终拼出来的向量长度应该是:2 + 1 + 5 = 8

4.1 输入数据

DataStream<Row>inputStream=env.fromElements(Row.of(Vectors.dense(2.1,3.1),1.0,Vectors.sparse(5,newint[]{3},newdouble[]{1.0})),Row.of(Vectors.dense(2.1,3.1),1.0,Vectors.sparse(5,newint[]{4,2,3,1},newdouble[]{4.0,2.0,3.0,1.0})));TableinputTable=tEnv.fromDataStream(inputStream).as("vec","num","sparseVec");

这里sparseVec的 size=5,意味着它代表长度为 5 的向量,只不过用稀疏方式存储非零位置。

4.2 创建 VectorAssembler

VectorAssemblervectorAssembler=newVectorAssembler().setInputCols("vec","num","sparseVec").setOutputCol("assembledVec");

拼接顺序就是:vec在前,num在中间,sparseVec在最后。
最终向量的 layout 可以理解为:

assembledVec = [ vec(2 dims) | num(1 dim) | sparseVec(5 dims) ]

4.3 transform 并读取输出

TableoutputTable=vectorAssembler.transform(inputTable)[0];VectoroutputValue=(Vector)row.getField(vectorAssembler.getOutputCol());System.out.printf("... Output Value: %s\n",outputValue);

输出 Value 会是一个 Vector(可能打印成 dense 或 sparse),内容会把三列的信息组合到同一个向量里。

5. 实战注意点(很关键)

1)OneHotEncoder 输出通常是 SparseVector,Assembler 非常适配

这也是最常见链路:

  • StringIndexer:city -> cityIndex
  • OneHotEncoder:cityIndex -> cityVec (SparseVector)
  • VectorAssembler:[数值列, cityVec, 其它Vec] -> features
  • LogisticRegression:features -> prediction

2)数值列不要忘记类型一致性

你的示例里num是 Double(1.0)。实际表里可能是 INT/LONG/FLOAT,建议统一成 Double 或确保能被识别为 Number。

3)维度稳定性是上线生命线

如果你在训练时inputCols=["age","cityVec","deviceVec"],上线推理千万不要换成["cityVec","age","deviceVec"],否则模型输入维度语义全错。

4)handleInvalid 的选择

  • 离线训练:可以ERROR_INVALID让问题暴露
  • 线上:更倾向“先做清洗”,或者用能跳过/替代的策略(如果支持),避免任务被脏数据打挂

6. 小结

VectorAssembler 是 Flink ML 里把“多列特征形态”统一成features向量列的关键组件:

  • 支持 Number + Vector 混合拼接
  • inputCols顺序决定最终向量维度布局
  • 常用于把 one-hot、embedding、数值特征拼成一个 features 列喂给模型
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 16:51:32

ViGEmBus虚拟游戏手柄驱动:让所有手柄在PC上畅玩游戏的终极指南

ViGEmBus虚拟游戏手柄驱动&#xff1a;让所有手柄在PC上畅玩游戏的终极指南 【免费下载链接】ViGEmBus 项目地址: https://gitcode.com/gh_mirrors/vig/ViGEmBus 你是否曾经遇到过这样的困扰&#xff1a;心爱的手柄连接电脑后&#xff0c;游戏却完全无法识别&#xff1…

作者头像 李华
网站建设 2026/4/17 18:32:51

PyTorch-CUDA-v2.8镜像对GPT系列模型的兼容性测试

PyTorch-CUDA-v2.8镜像对GPT系列模型的兼容性测试 在当前大模型研发如火如荼的背景下&#xff0c;一个稳定、高效且开箱即用的深度学习运行环境&#xff0c;已经成为AI工程师日常开发中的“刚需”。尤其是在训练和部署GPT类大规模语言模型时&#xff0c;动辄数十GB显存占用、复…

作者头像 李华
网站建设 2026/4/18 5:52:21

GDP-D-甘露糖二钠盐 —— 糖基化研究与治疗开发的核心糖核苷酸 148296-46-2

GDP-D-甘露糖二钠盐是糖核苷酸家族中至关重要的成员&#xff0c;在细胞糖基化进程中扮演着不可替代的角色。作为甘露糖残基的关键活化供体&#xff0c;它直接参与蛋白质和脂质的翻译后修饰&#xff0c;影响其结构、稳定性与生物功能。从基础生物化学研究到前沿生物制药开发&…

作者头像 李华