NiFi十进制数字格式

时间:2018-09-11 11:52:17

标签: apache-nifi

给出以下CSV输入文件:

name,amount
Abc,"1,234.56"
Def,"2,222,222.222222"

金额字段包含带逗号的十进制数字。如何在NiFi中将其解析为数字?我不想将其解析为字符串。

我考虑过使用UpdateRecord处理器,表达式语言和Java的NumberFormat对其进行解析,但是似乎无法从表达式语言访问NumberFormat。另外,我想使用ScriptedRecordSetWriter进行解析,但在那里找不到任何有效的示例。

感谢任何帮助,尤其是有关工作示例的帮助。

1 个答案:

答案 0 :(得分:4)

当我们读取数据时,我们仍然需要使用String type(as the data is enclosed in "),而从UpdateRecord处理器中写出数据时,我们可以使用int/decimal类型来写入输出流文件记录

1。使用记录路径值:

您可以将传入数据读取为 String 数据类型,输出流文件将具有integer类型define(),并使用UpdateRecord处理器replace ','''

在UpdateRecord处理器中将新属性添加为

/金额

substringBefore(replace(/amount,',',''),'.')

enter image description here

现在输出流文件的数量字段将具有整数数据类型。

2。使用文字值:

如果我们使用文字值,则可以使用replacetoNumber函数在 field.value 上使用NiFi expression language函数,我们可以获取整数值用于金额字段。 enter image description here

两种方式我们都将以json格式获取输出流文件

[{"name":"Abc","amount":1234},{"name":"Def","amount":2222222}]

以相同的方式,如果要使用小数作为输出流文件类型,请定义具有小数类型的 avro模式,并且不要使用 substringBefore toNumber 功能。