mall-portrait-common
统一的画像数据结构与工具集,面向商城画像后台的数据接入、清洗与聚类流程。
简介
- 封装了字段齐全的
UserEvent、UserProfile与RawEvent,可串联多个数据源并标准化事件元信息。 - 提供
RecordParser、LabelGenerator和DataSink等扩展点,方便各类加工、标签计算与落盘实现。 - 使用
serde/polars/chrono等可靠依赖,兼顾异步写入与多源数据校验。
核心模块
UserEvent等标准化结构定义在 src/normalized.rs,包含事件上下文、载荷、多态 payload 与质量得分。RawEvent与原始记录模型在 src/raw.rs,用于采集 CSV/Excel 行数据,并保留字段哈希便于追踪。UserProfile封装二维/多维行为指标与 RFM 分层,位于 src/profile.rs。RecordParser在 src/utils.rs 提供通用字段读取、日期解析与置信度计算,便于从原始字段提取高质量参数。LabelGenerator抽象见 src/labels.rs,输出polars::Expr便于在 Polar LazyFrame 中拼接特征算子。DataSinktrait(src/data_sink.rs)定义异步写入接口,搭配任何异步存储或消息队列。- 错误类型集中在 src/error.rs,通过
PortraitError/Result描述数据接入、解析、算法、IO 等常见故障。
快速开始
- 在
Cargo.toml中添加依赖:
[dependencies]
mall-portrait-common = "0.1"
- 组合标准结构:
use Utc;
use ;
use json;
use HashMap;
use Uuid;
let mut raw_fields = new;
raw_fields.insert;
raw_fields.insert;
let parser = new;
let quality = parser.calculate_quality_score as f32;
let mut payload = new;
payload.insert;
payload.insert;
let event = UserEvent ;
- 实现
LabelGenerator与DataSink即可在 pipeline 中计算特征并写入下游仓库。
依赖与插件
- 主要依赖见 Cargo.toml(
polars+lazy、serde+derive、async-trait、uuid等)。 - 推荐与
polars::LazyFrame结合exprs()生成标签,并在写入时复用DataSink扩展。
发布与贡献
- 采用 MIT 协议;请保持语义化版本号并补齐变更记录。
- 登录 crates.io 后执行
cargo publish发布新版本,推荐在发布前运行cargo package与cargo fmt。 - 欢迎提交 Issue/PR,保持描述清晰以便快速定位数据流或标签逻辑。