Синтаксический анализ CSV с использованием Groovy-скрипта с использованием apache-nifi - PullRequest
0 голосов
/ 23 декабря 2019

У меня есть CSV-файл с более чем 70 столбцами и миллионами записей. Но для обработки мне нужно около 20 столбцов. Чтобы извлечь их, я использовал модифицированный скрипт groovy в Разделенные поля и NiFi API с Groovy .

Мой скрипт:

import java.nio.charset.StandardCharsets

def flowFile = session.get()
if(!flowFile) return

flowFile = session.write(flowFile, {inputStream, outputStream ->
   inputStream.eachLine { line ->
   a = line.tokenize(',')
   outputStream.write("${a[0]},${a[1]},${a[2]},${a[3]},${a[4]}\n".toString().getBytes(StandardCharsets.UTF_8))
   }
} as StreamCallback)

session.transfer(flowFile, REL_SUCCESS)

Оригинал csv:

date,id,name,age,addr,lang
19/12/2019,1,sachith,29,sac@email,go
,2,nalaka,29,nalaka@email,
,,muhandiram,,c

Когда это обрабатывается процессором ExecuteScript, вывод выглядит следующим образом:

date,id,name,age
19/12/2019,1,sachith,29
2,2,nalaka,29
null,null,muhandiram,null

Если поле данных пустое, оно заменяется на id, а другие пустые значения заменяются на null.

Почему скрипт плохо себя ведет? Мои знания о groovy почти ничего.

ожидаемый результат:

date,id,name,age
19/12/2019,1,sachith,29
,2,nalaka,29
,,muhandiram,
...