csv - 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
处理器进行验证。但它无法捕捉到这一点。
解决方案
我能够使用ValidateCSV
处理器来验证该行。这很棘手,因为,
中间{"Lane":"ABC Lane","No":"24"}
会将此字段视为 2 个不同的字段。
每个 invalids 行都将被路由到 invalid :
ValidateCsv 处理器配置:
架构:
ParseInt(),StrNotNullOrEmpty(),StrNotNullOrEmpty(),StrRegex("\{.*"),StrRegex(".*\}")
如果您想要更好的架构,您应该查看此处理器文档以获取更多详细信息:
推荐阅读
- go - 如何制作反向代理?
- java - activityStartTrigger:使用谷歌登录时不是白名单
- jquery - JSON Stringify 拆分每个结果
- mongodb - 如何直接更新mongodb并将数据发送到前端
- java - 变量可能尚未在二维数组中初始化
- dialogflow-es - 自定义 Google 琐事或个性测验
- javascript - 如何创建动态 HTML 标头
- angular - cors:从角度发送请求到springboot
- node.js - TypeDI @Inject() 不起作用,但 Container.get() 可以
- json - 解析 JSON 文件时获取行号