Apache -NiFi Array Index вне пределов исключения - PullRequest
0 голосов
/ 13 февраля 2020

Я использую ExecuteGroovyScript процессор только для того, чтобы извлечь только нужные столбцы для моих дальнейших вычислений.

Groovy Код:

def flowFile = session.get()

if(!flowFile) return

flowFile = session.write(flowFile, {inputStream, outputStream ->
    outputStream.withWriter("UTF-8"){ w ->
        inputStream.eachLine("UTF-8"){ line ->

                 def row = line.split(';',-1)

                 w << row[0,1,6,8,9,11].join(',') << '\n'

        }
    }
} as StreamCallback)

session.transfer(flowFile, REL_SUCCESS)

Но для некоторых csv я получаю java .lang.ArrayIndexOutOfBoundsException .

Мой CSV:

id,name,email,address
1,sachith,sachith@email.com,{"Lane":"ABC Lane","No":"24"}
2,nalaka,nalaka@email.com,{"Lane":
"DEF Lane","No":"34"}

Как я могу получить только 1 строку и игнорировать другие две строки? Я пробовал ValidateCSV процессор для проверки. Но это не может захватить это.

1 Ответ

1 голос
/ 14 февраля 2020

Я смог использовать ValidateCSV процессор для проверки строки. это непросто, потому что , в середине {"Lane":"ABC Lane","No":"24"} будет рассматривать это поле как 2 разных поля.

все строки инвалидов будут перенаправлены на недопустимые значения:

enter image description here

Конфигурация процессора ValidateCsv:

enter image description here

Схема:

ParseInt(),StrNotNullOrEmpty(),StrNotNullOrEmpty(),StrRegex("\{.*"),StrRegex(".*\}")

Вы должны посмотреть на эта документация процессора для более подробной информации, если вы хотите лучшую схему:

https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-standard-nar/1.11.0/org.apache.nifi.processors.standard.ValidateCsv/additionalDetails.html

...