我一直在使用Nifi将大量深层嵌套的xml文件转换为csv。
要求是从一个大xml中创建许多小表(每个表具有不同的列数),所有小表将被合并或与特殊字符(例如连字符)连接在一起,最后输出一个csv。 / p>
但是,我不确定我的方法是否最佳。
我的Nifi管道如下。
我的方法是像下面这样从xml创建json,并在将json拆分到每个表后使用控制器服务将json转换为xml。与其从头重写xml,不如直接创建{column:value}字典或json更快。
{table1:[{column1:value1 ,,,, column_n:value_n},{},{}]
table2:[{column1:value1 ,,,, column_n:value_n},{},{},{},{}]
*每个表值中列表的长度表示csv中的记录数。
当我在本地环境中尝试上述管道时,它处理250 xml的时间大约为60秒,每个文件大约0.25秒。 但是,当我用ExecuteScript(Jython)代替ExecuteStreamCommand时,Nifi却因为内存不足错误而无法正常运行,而不是我期望的更快的性能。仅一个文件,每个文件的处理速度也超过30秒。
为什么ExecuteScript(Jython)的性能不佳? 如果我必须使用ExecuteScript,还是应该使用Groovy,还是有更好的方法来进行csv转换?
答案 0 :(得分:0)
文档说明ExecuteScript是实验性的。
ExecuteStreamCommand更适合您的目标
对流文件的内容执行外部命令,并使用命令结果创建新的流文件。