首页 > 解决方案 > Apache-NiFi 数组索引越界异常

问题描述

我使用ExecuteGroovyScript处理器只是为了提取所需的列以进行进一步的计算。

常规代码:

def flowFile = session.get()

if(!flowFile) return

flowFile = session.write(flowFile, {inputStream, outputStream ->
    outputStream.withWriter("UTF-8"){ w ->
        inputStream.eachLine("UTF-8"){ line ->

                 def row = line.split(';',-1)

                 w << row[0,1,6,8,9,11].join(',') << '\n'

        }
    }
} as StreamCallback)

session.transfer(flowFile, REL_SUCCESS)

但对于某些人csv,我得到java.lang.ArrayIndexOutOfBoundsException

我的 csv :

id,name,email,address
1,sachith,sachith@email.com,{"Lane":"ABC Lane","No":"24"}
2,nalaka,nalaka@email.com,{"Lane":
"DEF Lane","No":"34"}

我怎样才能只得到 1 行而忽略其他两行?我已经尝试过ValidateCSV处理器进行验证。但它无法捕捉到这一点。

标签: csvgroovyapache-nifi

解决方案


我能够使用ValidateCSV处理器来验证该行。这很棘手,因为,中间{"Lane":"ABC Lane","No":"24"}会将此字段视为 2 个不同的字段。

每个 invalids 行都将被路由到 invalid :

在此处输入图像描述

ValidateCsv 处理器配置:

在此处输入图像描述

架构:

ParseInt(),StrNotNullOrEmpty(),StrNotNullOrEmpty(),StrRegex("\{.*"),StrRegex(".*\}")

如果您想要更好的架构,您应该查看此处理器文档以获取更多详细信息:

https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.11.0/org.apache.nifi.processors.standard.ValidateCsv/additionalDetails.html


推荐阅读