Хотя вы можете сделать это через NiFi, я бы посоветовал вам попытаться изменить источник и, возможно, исправить способ форматирования и записи чисел.
В любом случае, один из способов, который сразу приходит мне в голову, этоиспользуйте процессор ExecuteScript
для обработки части пробела.
Предположим, у вас есть CSV как это:
name,val
item1, 1 345 000
item2, 2 432
Вы можете использовать процессор SplitRecord
для преобразования CSV в JSONи разделить его на 1 запись.Передайте выходные данные этого к ExecuteScript
.
. У вас может быть следующий код Groovy
для чтения содержимого файла потока и замены всех пробелов
import org.apache.commons.io.IOUtils
import java.nio.charset.StandardCharsets
import groovy.json.JsonSlurper
flowFile = session.get()
if(!flowFile)return
def jsonSlurper = new JsonSlurper()
def text = ''
flowFile = session.write(flowFile, {inputStream, outputStream ->
input = IOUtils.toString(inputStream, StandardCharsets.UTF_8)
inputJson = jsonSlurper.parseText(input)
inputJson.val = inputJson.val.replaceAll("\\s", "")
outputStream.write(inputJson.toString().getBytes(StandardCharsets.UTF_8))
} as StreamCallback)
session.transfer(flowFile, REL_SUCCESS)
Соединение отношения success
ExecuteScript
для процессора, как того требует ваш вариант использования.В любом случае, вывод для предоставленного ввода будет выглядеть так:
{
"name" : "item1",
"val" : "1345000"
}
{
"name" : "item2",
"val" : "2432"
}