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

NiFi新手求助:无需自定义脚本实现单条CSV转多条JSON数组记录

无需自定义脚本的NiFi实现方案

完全可以用NiFi自带的处理器组合实现你的需求,不需要编写自定义脚本,具体步骤如下:

步骤1:解析CSV为结构化Record

使用ConvertRecord处理器完成CSV到结构化Record的转换:

  • 配置记录读取器为CSVReader:开启"Has Header Row",设置分隔符为逗号,确保id列被正确识别为字段
  • 配置记录写入器为JSONRecordSetWriter:选择输出单条Record为JSON对象(而非数组),方便后续处理

这一步会把原始CSV的每一行转换成一条独立的JSON格式Record,例如:

{"id":"00abc","attribute1":"100","attribute2":"yes","attribute3":"up"}

步骤2:拆分单条Record为多条属性条目

使用JoltTransformRecord处理器,通过Jolt转换规则将单条Record拆分为多个符合要求的属性对象:

  • 配置记录读取器为JSONReader,匹配ConvertRecord输出的JSON格式
  • 配置记录写入器为JSONRecordSetWriter,设置输出为JSON数组
  • 核心配置Jolt Specification,使用以下规则:
[
  {
    "operation": "shift",
    "spec": {
      "id": "primary_key",
      "attribute1": "[0].field_value",
      "attribute2": "[1].field_value",
      "attribute3": "[2].field_value",
      "#attribute1": "[0].field_name",
      "#attribute2": "[1].field_name",
      "#attribute3": "[2].field_name"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "*": {
        "@(2,primary_key)": "[&1].primary_key",
        "*": "[&1].&"
      }
    }
  }
]

该规则会将单条Record转换为包含3个对象的数组,每个对象对应一个属性条目,例如:

[
  {"primary_key":"00abc","field_name":"attribute1","field_value":"100"},
  {"primary_key":"00abc","field_name":"attribute2","field_value":"yes"},
  {"primary_key":"00abc","field_name":"attribute3","field_value":"up"}
]

步骤3:聚合所有条目并生成最终JSON结构

  1. 使用SplitRecord处理器将Jolt输出的数组拆分为单个JSON对象(每个对象对应一条属性条目)
  2. 使用MergeContent处理器将所有单个对象聚合为一个JSON数组:
    • 设置"Merge Strategy"为"Bin-Packing Algorithm"
    • 设置"Delimiter"为逗号
    • 设置"Header"为[,"Footer"为]
  3. 使用ReplaceText处理器为聚合后的数组添加外层结构:
    • 设置"Search Value"为(.*)(匹配整个数组内容)
    • 设置"Replacement Value"为:
{
    "type": "record",
    "result": {
        "fields": $1
    }
}

通过以上三步,就能完全实现你需要的输出格式,全程无需编写自定义脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:52:32