Формат десятичных чисел NiFi - PullRequest
0 голосов
/ 11 сентября 2018

Учитывая входной файл CSV ниже:

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

Поле суммы содержит десятичное число с запятой. Как разобрать его в число в NiFi? Я не хочу разбирать его на строку.

Я думал об использовании процессора UpdateRecord, языка выражений и Java NumberFormat для его анализа, но кажется, что NumberFormat недоступен из языка выражений. В качестве альтернативы я хочу использовать ScriptedRecordSetWriter для анализа, но не смог найти ни одного рабочего примера.

Цените любую помощь, особенно с рабочим примером.

1 Ответ

0 голосов
/ 11 сентября 2018

Когда мы читаем входящие данные, нам все еще нужно использовать String type(as the data is enclosed in ") при записи данных из процессора UpdateRecord, мы можем использовать типы int/decimal для записи выходных записей потокового файла.

1. Использование значения пути записи:

Вы можете прочитать входящие данные как String тип данных. Выходной файл потока будет иметь целочисленный тип () и с помощью процессора UpdateRecord заменить ',' на ''

Добавить новое свойство в процессор UpdateRecord как

/ сумма

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

enter image description here

Теперь выходной файл потока будет иметь целочисленный тип данных для поля количества.

2. Использование буквального значения:

Если мы используем буквальное значение, мы можем использовать язык выражений NiFi функции для field.value с помощью функций replace и toNumber, мы можем получить значение int для поле количества. enter image description here

В обоих случаях мы получим выходной файл в формате json как

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

Таким же образом, если вы хотите использовать десятичный тип выходного файла потока, определите схему avro с десятичным типом и не используйте функции substringBefore и toNumber .

...