【发布时间】:2019-12-24 17:34:30
【问题描述】:
我有一个包含 70 多列和数百万条记录的 csv 文件。但是对于处理,我需要大约 20 列。为了提取它们,我在Split fields and NiFi API with Groovy 中使用了修改后的groovy 脚本。
我的脚本:
import java.nio.charset.StandardCharsets
def flowFile = session.get()
if(!flowFile) return
flowFile = session.write(flowFile, {inputStream, outputStream ->
inputStream.eachLine { line ->
a = line.tokenize(',')
outputStream.write("${a[0]},${a[1]},${a[2]},${a[3]},${a[4]}\n".toString().getBytes(StandardCharsets.UTF_8))
}
} as StreamCallback)
session.transfer(flowFile, REL_SUCCESS)
原始 csv:
date,id,name,age,addr,lang
19/12/2019,1,sachith,29,sac@email,go
,2,nalaka,29,nalaka@email,
,,muhandiram,,c
当 ExecuteScript 处理器正在处理此内容时,输出如下所示:
date,id,name,age
19/12/2019,1,sachith,29
2,2,nalaka,29
null,null,muhandiram,null
如果数据字段为空,则替换为id,其他空值替换为null。
为什么脚本行为不端?
我对groovy 的了解几乎一无所有。
预期输出:
date,id,name,age
19/12/2019,1,sachith,29
,2,nalaka,29
,,muhandiram,
【问题讨论】:
标签: csv parsing groovy apache-nifi