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

如何在Apache NiFi中跳过CSV文件前9行并读取内容

在Apache NiFi中跳过CSV前9行的实现方法

下面是几种实用的实现方式,根据你的场景选择即可:

方法一:使用ReplaceText处理器(最简单高效)

这是处理小到中等大小CSV文件的首选方案,通过正则匹配直接移除前9行:

  • 添加并配置ReplaceText处理器:
    1. Search Value:填入正则表达式 ^([^\n]*\n){9},该表达式会匹配文件开头的9行内容(包含每行末尾的换行符)
    2. Replacement Value:留空(表示删除匹配到的内容)
    3. Search Mode:选择Replace First(只替换一次开头的9行,避免误删中间内容)
    4. Regular Expression Engine:保持默认的Java即可

处理后,流文件中就只剩下第10行及以后的CSV内容。

方法二:拆分+过滤+合并(适合需单独处理每行的场景)

如果需要对每行做额外处理,可通过拆分-过滤-合并的流程实现:

  1. 添加SplitText处理器,将Line Split Count设为1,把CSV文件拆分为单个行的流文件
  2. 添加UpdateAttribute处理器,添加属性line.number,值设为${split.index + 1}(给每行分配从1开始的行号)
  3. 添加RouteOnAttribute处理器,创建路由规则keep_lines,表达式为${line.number:gt(9)},将行号大于9的流文件路由到成功关系
  4. 添加MergeContent处理器,将过滤后的单行流文件重新合并为完整的CSV文件,需配置Delimiter Strategy为Text,Header留空,Footer留空,Delimiter设为\n

方法三:使用ExecuteScript处理器(自定义逻辑)

如果需要更灵活的控制,可通过脚本直接处理内容,以Groovy脚本为例:
添加ExecuteScript处理器,将Script Language设为Groovy,填入以下脚本:

def flowFile = session.get()
if (!flowFile) return

flowFile = session.write(flowFile, { inputStream, outputStream ->
    def reader = new BufferedReader(new InputStreamReader(inputStream))
    // 跳过前9行
    9.times { reader.readLine() }
    // 写入剩余内容
    String line
    while ((line = reader.readLine()) != null) {
        outputStream.write((line + System.lineSeparator()).getBytes())
    }
} as StreamCallback)

session.transfer(flowFile, REL_SUCCESS)

该脚本会直接读取流文件内容,跳过前9行后将剩余内容写入新的流文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 17:55:11