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

如何从单个通用类型Dataset拆分出多份不同类类型的Dataset

解决方案

核心使用Dataset原生的flatMap算子实现数组展开,全程不依赖DataFrame的explode方法,完全符合要求。

原有代码的错误点

  • for循环遍历对象错误,应该遍历add_marry数组而非General对象本身
  • flatMap要求返回可迭代集合,原有代码未覆盖空数组场景,也没有正确返回集合结构

正确实现代码

// 首先将源数据转为强类型General Dataset
val dsHome: Dataset[General] = dfHome.as[General]

// 生成Dataset[Mary]
val dsMary: Dataset[Mary] = dsHome.flatMap { general =>
  general.add_marry.map(addr => Mary(general.id, general.name, addr.streetUK, addr.houseUK))
}

// 生成Dataset[John]
val dsJohn: Dataset[John] = dsHome.flatMap { general =>
  general.add_john.map(addr => John(general.id, general.name, addr.streetUS, addr.houseUS))
}

实现说明

flatMap算子会自动将每一条General数据返回的数组展开为多行,数组为空时对应行不会生成任何输出,自动适配空数组场景。最终输出结果和预期完全一致:

  • 若原General行add_marry有N个元素,就生成N条Mary数据
  • 若原General行add_john有M个元素,就生成M条John数据

全程仅使用Dataset强类型API,未调用任何DataFrame的explode相关方法,满足约束条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:45:01