用途
该技能用于在 Databricks 上生成逼真、故事驱动的合成数据,基于 Spark + Faker + Pandas UDF(强烈推荐)。其目标是让合成数据能够展示 Databricks 如何解决真实业务问题,而非生成无意义的均匀分布数据。
主要能力
- 生成带有业务故事线的数据:模式为“出现问题 → 业务影响(金额)→ 分析根因 → 定位受影响客户 → 修复与预防”。
- 支持无服务器执行(Databricks Connect Serverless)。
- 支持多种输出格式:Parquet(默认写入 Volume)、Delta 表、JSON/CSV。
- 支持数据特征:偏斜分布(默认启用)、连接与引用完整性(默认启用)、坏数据注入(用于数据质量测试)、多语言文本、增量模式(追加而非覆盖)。
- 提供 ML 就绪数据、时间乘数、行一致性等参考(references/1-data-patterns.md)。
- 提供故障排查参考(references/2-troubleshooting.md)。
使用方式
- 收集需求:向用户确认 catalog/schema(必须显式询问,不得默认)、行业领域(电商、支持工单、IoT、金融等)。若用户未指定故事,应主动提议一个包含事件、异常或趋势的故事。
- 展示计划并等待批准:列出输出位置(catalog.schema 及 Volume 路径)、故事说明、表规格(表名、描述、行数、关键假设)、业务指标、数据特征选项。在用户批准计划(包括 catalog)之前,不得生成代码。
- 生成代码:使用 Databricks Connect Serverless 创建 Spark 会话,使用 spark.range() 配合 pandas_udf 调用 Faker 生成数据。先创建 schema 和 Volume,先写主表到 Delta,再读回用于子表外键连接。
- 生成后验证:使用 databricks experimental aitools tools query 验证行数、分布和引用完整性,可直接查询 Parquet 文件。
关键规则:数据必须讲述故事;所有数据服务于故事;使用行业术语但保持 schema 简单;绝不使用均匀分布(需偏斜类别、对数正态金额、80/20 模式);主表约 100K+ 行以保留趋势;必须询问 catalog/schema;先展示计划待批准;先主表后子表;使用 Spark + Faker + Pandas UDF;默认使用 Databricks Connect Serverless;无服务器上不使用 .cache() 或 .persist();不使用 Python 循环或 .collect()。
性能规则:避免驱动端 Python 循环、.collect() 后迭代、Pandas↔Spark 转换、读写临时文件、标量 UDF。推荐模式:spark.range() → Spark 转换 → pandas_udf 调用 Faker → 直接写入。
分区建议:<100K 行用 8 分区;100K-500K 用 16;500K-1M 用 32;1M+ 用 64+。
适用场景
- ML 模型训练或复杂时间模式(参考 references/1-data-patterns.md)。
- 演示 Databricks 的根因分析价值,例如支付系统故障导致工单激增、企业客户流失、收入下降。
- 数据质量测试(坏数据注入)。
- 需要可查询表或复制遗留系统格式的场景。
限制
- 需要 Python 3.12 和 databricks-connect>=16.4。
- 无服务器上不支持 .cache()、.persist()、广播变量。
- Faker 库需本地安装,并在 UDF 内部导入。
- 无服务器上 PERSIST TABLE 不受支持。
- 需区分 F.window(仅流式)与 pyspark.sql.window 的 Window。
- 若用户明确要求本地且少于 30K 行,才可使用 Polars。
- 安装命令:uv pip install "databricks-connect>=16.4,<17.4" faker numpy pandas holidays。
相关技能:databricks-unity-catalog(管理 catalog、schema 和 volume)、databricks-dabs(生产部署)。