news 2026/6/15 11:27:53

Flink ML Bucketizer 连续特征分桶(多列映射、splitsArray、handleInvalid)+ Java 示例解读

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Flink ML Bucketizer 连续特征分桶(多列映射、splitsArray、handleInvalid)+ Java 示例解读

1. Bucketizer 做什么?

Bucketizer 会把输入列(连续值)按你配置的splitsArray切分成区间,并输出区间编号:

  • 输出的桶索引范围:[0, numSplitsInThisColumn - 2](也就是区间数量-1)
  • 文档描述为[0, numSplitsInThisColumn - 1],但通常 splits 的长度为 N,会产生 N-1 个区间,因此索引通常落在[0, N-2](你可以以实际输出为准)

例如 splits 为[-0.5, 0.0, 0.5]

  • 区间1:[-0.5, 0.0)
  • 区间2:[0.0, 0.5]
    最终输出 bucketIndex 为 0 或 1(两段)

2. 输入列与输出列

输入列(Input Columns)

参数名类型默认值说明
inputColsNumbernull需要分桶的连续特征列(可多列)

输出列(Output Columns)

参数名类型默认值说明
outputColsDoublenull分桶后的离散特征(桶索引)列(可多列)

输出是 Double 类型的桶索引(有些场景你也会想转成 Int/Long 或进一步 one-hot)。

3. 核心参数(Parameters)详解

Key默认值必填说明
inputColsnull输入列名数组
outputColsnull输出列名数组
splitsArraynull每个输入列的切分点数组(二维数组)
handleInvalidERROR_INVALID遇到非法值(NaN、越界等)如何处理

3.1 splitsArray:分桶切分点怎么写?

splitsArrayDouble[][],它的长度必须等于inputCols.length,每个子数组对应一个输入列的切分点。

要求/建议:

  • 每个切分点数组要单调递增
  • 通常建议首尾用-INF/+INF包住,避免边界外数据出错
    比如:[-INF, 10.0, +INF]

3.2 handleInvalid:非法值如何处理?

常见策略(示例中使用了SKIP_INVALID):

  • ERROR_INVALID:遇到非法值直接报错(默认)
  • SKIP_INVALID:跳过包含非法值的记录(整行被丢弃)
  • 有的体系还会支持KEEP_INVALID(保留并映射到特殊桶),具体以 Flink ML 实现为准

工程建议:

  • 离线训练:可以用ERROR_INVALID,尽早暴露数据质量问题
  • 在线/生产:更常用SKIP_INVALID或“先做清洗再分桶”,避免任务被脏数据打挂

4. Java 示例逐段解读

你的示例做了 4 列特征同时分桶:

4.1 输入数据

DataStream<Row>inputStream=env.fromElements(Row.of(-0.5,0.0,1.0,0.0));TableinputTable=tEnv.fromDataStream(inputStream).as("f1","f2","f3","f4");

只有一行数据,四个连续特征:f1=-0.5, f2=0.0, f3=1.0, f4=0.0

4.2 配置 splitsArray

Double[][]splitsArray=newDouble[][]{newDouble[]{-0.5,0.0,0.5},// f1:两段newDouble[]{-1.0,0.0,2.0},// f2:两段newDouble[]{Double.NEGATIVE_INFINITY,10.0,Double.POSITIVE_INFINITY},// f3:两段newDouble[]{Double.NEGATIVE_INFINITY,1.5,Double.POSITIVE_INFINITY}// f4:两段};

可以把它理解为:

  • f1在 [-0.5,0) 或 [0,0.5] -> bucket 0/1
  • f2在 [-1,0) 或 [0,2] -> bucket 0/1
  • f3在 (-inf,10) 或 [10,inf) -> bucket 0/1
  • f4在 (-inf,1.5) 或 [1.5,inf) -> bucket 0/1

4.3 创建 Bucketizer 并 transform

Bucketizerbucketizer=newBucketizer().setInputCols("f1","f2","f3","f4").setOutputCols("o1","o2","o3","o4").setSplitsArray(splitsArray).setHandleInvalid(HasHandleInvalid.SKIP_INVALID);TableoutputTable=bucketizer.transform(inputTable)[0];

输出表会保留原列 + 新增o1~o4四个桶索引列。

4.4 打印输入与输出

示例把每列输入与输出读出来并打印:

inputValues[i]=(double)row.getField(bucketizer.getInputCols()[i]);outputValues[i]=(double)row.getField(bucketizer.getOutputCols()[i]);

最终打印类似:

  • Input Values: [-0.5, 0.0, 1.0, 0.0]
  • Output Values: [?, ?, ?, ?](取决于边界规则,通常 0.0 会落在右边区间)

5. 实战建议:分桶到底怎么设计?

1)优先用 -INF / +INF 包住区间

避免线上出现“越界数据导致报错”。

2)分桶边界最好来自数据分布

常见做法:

  • 等频分桶(按分位数)
  • 等宽分桶(按范围均分)
  • 业务阈值分桶(如价格档位、风控评分段)

3)Bucketizer 通常不是最后一步

分桶后的输出是“桶索引”,很多模型更喜欢 one-hot 或 embedding:

  • LR / 线性模型:桶索引 → one-hot(或直接当作类别特征处理)
  • 树模型:可以直接用数值,但分桶可能帮助稳定
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/5 16:57:21

Files文件管理器性能调优实战:从瓶颈定位到极致优化

Files文件管理器性能调优实战&#xff1a;从瓶颈定位到极致优化 【免费下载链接】Files Building the best file manager for Windows 项目地址: https://gitcode.com/gh_mirrors/fi/Files 作为一名系统工程师&#xff0c;我经常面临老旧设备上Files文件管理器性能不佳的…

作者头像 李华
网站建设 2026/6/14 8:50:03

YOLOv10模型支持Tensor Cores,充分利用Ampere架构GPU

YOLOv10 模型如何借力 Tensor Cores 释放 Ampere 架构 GPU 的极致性能 在现代工业视觉系统中&#xff0c;一个看似简单的问题却长期困扰着工程师&#xff1a;如何在保证高精度的同时&#xff0c;实现每秒数百帧的稳定目标检测&#xff1f;尤其是在半导体质检、物流分拣或自动驾…

作者头像 李华
网站建设 2026/6/12 22:40:40

互联网大厂Java小白面试实录:从Spring Boot到Kubernetes的技术场景深度解析

文章简述 在这篇文章中&#xff0c;我们将通过一个模拟的互联网大厂面试场景&#xff0c;带领大家深入了解Java小白在面试中可能遇到的技术问题。面试涵盖了核心语言、微服务架构、安全框架以及云原生等多个技术栈&#xff0c;并通过具体的业务场景帮助求职者更好地把握技术难点…

作者头像 李华
网站建设 2026/5/31 23:32:55

YOLO目标检测在渔业养殖中的应用:鱼群数量统计

YOLO目标检测在渔业养殖中的应用&#xff1a;鱼群数量统计 在高密度水产养殖场里&#xff0c;清晨的监控画面中一片模糊晃动——成千上万条草鱼穿梭于水体之中&#xff0c;水面反光、鱼影重叠、光线随天气波动。传统靠人工抽样点数的方式早已无法满足现代化管理的需求。如何在不…

作者头像 李华
网站建设 2026/6/12 14:58:14

Java毕设项目推荐-基于SpringBoot的攻防靶场实验室平台的设计与实现环境部署 - 攻防实训 - 效果评估” 的全链路平台【附源码+文档,调试定制服务】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华