【问题标题】:Record processing using apache NiFi使用 apache NiFi 进行记录处理
【发布时间】:2020-02-22 12:14:44
【问题描述】:

我有一个包含以下数据的 csv:

id,name,loan,to_pay,paid
1,sachith,"house,cc,vehicle","10000,24500,233300","2000,5000,2030"
2,nalaka,"edu,cc","3400,5000","200,450"

在这里,一个用户可以拥有多笔贷款(最多 5 笔)。我想把它分成多行。

id,name,loan,to_pay,paid
1,sachith,house,10000,2000
1,sachith,cc,24500,5000
1,sachith,vehicle,233300,2030
2,nalaka,edu,3400,200
....

是否有专门的处理器来执行此操作?

编辑:ExecuteGroovyScript@daggett 之后的警告消息答案:

GroovyScript is invalid because
ord.codehaus.groovy.control.MultiCompilationErrorsException: startup failed:
General error during conversion : Error grabbing Grapes  --[unresolved dependency: org.apache.commons#commons-csv;1.8not found] java.lang/RuntimeExceptopm

【问题讨论】:

  • 你把那些奇怪的 csv 文件带到哪里去了?再次,我在这里只看到脚本......
  • 这些 csv 是由另一个系统提供的。这就是它给出输出的方式。

标签: csv apache-nifi


【解决方案1】:

使用ExecuteGroovyScript处理器:

//for complex csv let's use apache library for parsing/printing
@Grab(group='org.apache.commons', module='commons-csv', version='1.8')
import org.apache.commons.csv.*

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

ff.write{streamIn, streamOut->
    streamOut.withWriter("UTF-8"){w->
        def printer = CSVFormat.EXCEL.withHeader("id","name","loan","to_pay","paid").print(w)
        streamIn.withReader("UTF-8"){r->
            def parser = CSVFormat.EXCEL.withHeader().parse(r)
            parser.each{row->
                //split multivalues and print them in a loop
                def loan   = row.loan.split(',')
                def to_pay = row.to_pay.split(',')
                def paid   = row.paid.split(',')
                for(int i=0;i<loan.size();i++){
                    printer.printRecord(row.id, row.name, loan[i], to_pay[i], paid[i])
                }
            }
        }
        printer.flush()
    }
}
REL_SUCCESS<<ff

【讨论】:

  • GroovyScript 无效,因为 org.codehaus.groovy.control.MultipleCompilationErrorsExcpetion
  • 抱歉耽搁了,问题已更新并带有警告。
  • 该错误表示@Grab(group='org.apache.commons', module='commons-csv', version='1.8') 无法从maven repository 下载CSV 库。您可以从 commons.apache.org/proper/commons-csv/download_csv.cgi 手动下载所需的库并将它们放入 nifi/lib 目录并在脚本中注释 @Grab
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 2016-09-21
相关资源
最近更新 更多