Apache nifi NiFi十进制数格式
给定以下CSV输入文件:Apache nifi NiFi十进制数格式,apache-nifi,Apache Nifi,给定以下CSV输入文件: name,amount Abc,"1,234.56" Def,"2,222,222.222222" “金额”字段包含带逗号的十进制数。如何在NiFi中将其解析为数字?我不想把它解析成字符串 我曾想过使用UpdateRecord处理器、表达式语言和Java的NumberFormat来解析它,但似乎表达式语言无法访问NumberFormat。或者,我想使用ScriptedRecordSetWriter进行解析,但找不到任何可用的示例 非常感谢您的帮助,尤其是一个工作示例。
name,amount
Abc,"1,234.56"
Def,"2,222,222.222222"
“金额”字段包含带逗号的十进制数。如何在NiFi中将其解析为数字?我不想把它解析成字符串
我曾想过使用UpdateRecord处理器、表达式语言和Java的NumberFormat来解析它,但似乎表达式语言无法访问NumberFormat。或者,我想使用ScriptedRecordSetWriter进行解析,但找不到任何可用的示例
非常感谢您的帮助,尤其是一个工作示例。当我们在读取传入数据时,我们仍然需要使用
字符串类型(因为数据包含在“
中)在从UpdateRecord processor写入数据时,我们可以使用int/decimal
类型来写入输出流文件记录
1.使用记录路径值:
您可以将传入数据读取为字符串数据类型,输出流文件将定义整数类型(),并使用更新记录处理器,'和'
将UpdateRecord处理器中的新属性添加为
/amount
substringBefore(replace(/amount,',',''),'.')
现在,输出流文件的amount字段将具有整数数据类型
2.使用文字值:
如果我们使用文本值,我们可以在字段上使用函数。值通过使用替换和toNumber
函数,我们可以获得金额字段的int值。
这两种方式我们都将获得json格式的输出流文件,如下所示
[{"name":"Abc","amount":1234},{"name":"Def","amount":2222222}]
同样,如果您希望将decimal作为输出流文件类型,请使用decimal类型定义avro模式,并且不要使用substringBefore和toNumber函数。当我们读取传入数据时,我们仍然需要使用字符串类型(因为数据包含在“)
从UpdateRecord processor写入数据时,我们可以使用int/decimal
类型写入输出流文件记录
1。使用记录路径值:
您可以将传入数据读取为字符串数据类型,输出流文件将定义整数类型(),并使用更新记录处理器,'和'
将UpdateRecord处理器中的新属性添加为
/amount
substringBefore(replace(/amount,',',''),'.')
现在,输出流文件的amount字段将具有整数数据类型
2。使用文字值:
如果我们使用文本值,我们可以在字段上使用函数。值通过使用替换和toNumber
函数,我们可以获得金额字段的int值。
这两种方式我们都将获得json格式的输出流文件,如下所示
[{"name":"Abc","amount":1234},{"name":"Def","amount":2222222}]
同样,如果要将decimal作为输出流文件类型,请使用decimal类型定义avro模式,并且不要使用substringBefore和toNumber函数。是否尝试将数字作为数字(不带引号)也许这样NiFi可以正确地管理它。你是否尝试过将数字作为数字(不带引号)也许这样NiFi可以正确地管理它。