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

优化JQ分组脚本:解决首行丢失与大数据内存溢出问题

高效JQ分组聚合解决方案

问题描述

需要按name字段对多JSON输入分组,将每组的Date1、Date2、Date3值分别聚合为数组。现有脚本存在两个问题:

  1. 丢失首行输入数据
  2. 处理大数据集时内存占用过高,执行失败

现有脚本:

[inputs] | group_by(.name)[] | [{names: .[].name, availabledates1: [.[].Date1], availabledates2: [.[].Date2], availabledates3: [.[].Date3]}] | unique_by(.names) | .[]

问题根源

  1. 首行丢失:未使用-n选项时,jq将第一个输入对象作为初始值,[inputs]仅读取后续输入,导致首行数据被遗漏。
  2. 内存溢出:group_by需将所有输入数据加载到内存完成分组,且后续多次迭代数组(如.[].name)进一步消耗内存,无法适配大数据集。

高效解决方案

使用reduce流式处理,配合-n选项实现低内存分组聚合:

-n 'reduce inputs as $item ({};
  .[$item.name] = (
    .[$item.name] // {
      names: $item.name,
      availabledates1: [],
      availabledates2: [],
      availabledates3: []
    }
    | .availabledates1 += [$item.Date1]
    | .availabledates2 += [$item.Date2]
    | .availabledates3 += [$item.Date3]
  )
) | .[]'

方案说明

  • -n选项:让jq初始值为null,inputs读取所有输入JSON对象,包含首行数据,解决丢失问题。
  • reduce流式处理:逐个处理输入对象,仅维护当前分组的聚合状态,无需加载全量数据到内存,大幅降低内存占用,适配大数据集。
  • 分组逻辑:若当前name分组不存在,则初始化含空数组的对象;若已存在,则追加对应Date值到数组,实现高效聚合。

验证结果

输入:

{
   "name": "examplename1",
   "Date1": "value1",
   "Date2": "value2",
   "Date3": "value3"
}
{
   "name": "examplename1",
   "Date1": "value4",
   "Date2": "value5",
   "Date3": "value6"
}
{
   "name": "examplename2",
   "Date1": "value7",
   "Date2": "value8",
   "Date3": "value9"
}
{
   "name": "examplename2",
   "Date1": "value10",
   "Date2":"value11",
   "Date3": "value12"
}

执行脚本后输出:

{
  "names": "examplename1",
  "availabledates1": [
    "value1",
    "value4"
  ],
  "availabledates2": [
    "value2",
    "value5"
  ],
  "availabledates3": [
    "value3",
    "value6"
  ]
}
{
  "names": "examplename2",
  "availabledates1": [
    "value7",
    "value10"
  ],
  "availabledates2": [
    "value8",
    "value11"
  ],
  "availabledates3": [
    "value9",
    "value12"
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 09:54:18