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

如何通过ADF Dataflow聚合CSV数据生成目标JSON结构?

实现ADF中按father分组生成嵌套JSON的方案

方案一:DataFlow聚合+派生列组合(推荐,适配动态列场景)

如果你已经在用DataFlow,直接通过以下步骤完成分组聚合:

  1. 派生列生成单条Report对象:添加派生列转换,命名为reportItem,用表达式将当前行除father外的所有字段转为JSON对象:
    toJson(mapColumns(remove($$, 'father'), #item))
    
    这个表达式会自动忽略father列,把date、record1~recordn全部打包成一个JSON对象,不用硬编码列名,适配record列数量动态变化的场景。
  2. 按father聚合Report数组:添加聚合转换,分组键选择father,然后添加聚合列Reports,用collect(reportItem)函数把同father的所有reportItem收集成一个数组。
  3. 生成最终JSON结构:再添加一个派生列,将father和Reports数组组合成目标JSON结构,表达式:
    toJson({father: father, Reports: Reports})
    
  4. Sink输出设置:选择JSON格式的Sink,若要输出单个包含所有分组的JSON文件,开启「输出到单个文件」,并在JSON设置中选择「数组格式」;若要每个father对应一个JSON对象,选择「每行一个对象」即可。

方案二:Copy Activity层级映射(适合固定列、快速实现)

如果不想用DataFlow,可直接通过Copy Activity的层级映射完成分组:

  1. 源配置为CSV数据集,目标配置为JSON数据集。
  2. 进入「映射」面板,切换到层级模式:
    • 创建根节点,将CSV的father字段映射到根节点的father属性。
    • 创建Reports数组节点,将CSV的date、record1~recordn全部映射到该数组的子节点。
  3. 开启分组设置:在层级映射的根节点上,设置分组键为father。
  4. 注意事项:必须确保CSV数据已按father排序(可在源数据集的查询中添加ORDER BY father,或先通过DataFlow排序),否则Copy Activity的分组逻辑会失效。

关键注意点

  • 若record1~recordn的列数不固定,优先选方案一,mapColumns函数能自动适配所有非father列。
  • 聚合后的JSON输出格式可根据需求调整,Sink的JSON设置决定最终输出是单个数组还是多行对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:01:08