Nifi:将深度嵌套的xml转换为csv的最快方法(ExecuteScript与ExecuteStreamCommand)

时间:2019-07-04 08:33:57

标签: python xml csv groovy apache-nifi

我一直在使用Nifi将大量深层嵌套的xml文件转换为csv。

要求是从一个大xml中创建许多小表(每个表具有不同的列数),所有小表将被合并或与特殊字符(例如连字符)连接在一起,最后输出一个csv。 / p>

但是,我不确定我的方法是否最佳。

我的Nifi管道如下。

  1. GetFile
  2. ExecuteStreamCommand(Python脚本)
  3. SplitJson
  4. ConvertRecord(从Json到CSV)
  5. MergeContent(带有fragment.identifier策略)
  6. UpdateAttribute(在文件名后添加csv扩展名)
  7. PutFile

我的方法是像下面这样从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转换?

1 个答案:

答案 0 :(得分:0)