给出以下CSV输入文件:
name,amount
Abc,"1,234.56"
Def,"2,222,222.222222"
金额字段包含带逗号的十进制数字。如何在NiFi中将其解析为数字?我不想将其解析为字符串。
我考虑过使用UpdateRecord处理器,表达式语言和Java的NumberFormat对其进行解析,但是似乎无法从表达式语言访问NumberFormat。另外,我想使用ScriptedRecordSetWriter进行解析,但在那里找不到任何有效的示例。
感谢任何帮助,尤其是有关工作示例的帮助。
答案 0 :(得分:4)
当我们读取数据时,我们仍然需要使用String type(as the data is enclosed in ")
,而从UpdateRecord处理器中写出数据时,我们可以使用int/decimal
类型来写入输出流文件记录
1。使用记录路径值:
您可以将传入数据读取为 String 数据类型,输出流文件将具有integer类型define(),并使用UpdateRecord处理器replace ','与''
在UpdateRecord处理器中将新属性添加为
/金额
substringBefore(replace(/amount,',',''),'.')
现在输出流文件的数量字段将具有整数数据类型。
2。使用文字值:
如果我们使用文字值,则可以使用replace
和toNumber
函数在 field.value 上使用NiFi expression language函数,我们可以获取整数值用于金额字段。
两种方式我们都将以json格式获取输出流文件
[{"name":"Abc","amount":1234},{"name":"Def","amount":2222222}]
以相同的方式,如果要使用小数作为输出流文件类型,请定义具有小数类型的 avro模式,并且不要使用 substringBefore 和 toNumber 功能。