如何在Nifi中从处理器到处理器传递熊猫数据帧?

时间:2020-05-13 21:16:50

标签: python pandas dataframe apache-nifi

我要使用Nifi:

  1. 运行一个导出熊猫数据框的Python脚本
  2. 发送它,例如通过ExecuteStreamCommand可以输入和输出熊猫数据帧的各种即插即用Python脚本,不知道它们是通过Nifi运行的,并且我无法对其进行修改以使用STDIN / STDOUT代替熊猫。
  3. 将输出数据帧传递以进行进一步处理。

这可能吗?如果可以,怎么办?

采用另一种方式:

  1. 第一个脚本:flowfile-> pandas
  2. 许多脚本:用熊猫做东西
  3. 最后一个脚本:pandas-> flowfile

1 个答案:

答案 0 :(得分:6)

NiFi的ExecuteScript支持Jython,后者不允许使用Python本机库(pandas是本机库),因此您不能直接在NiFi中执行此操作。我建议您编写一个包含Python的外壳程序脚本,该脚本执行以下操作并使用ExecuteStreamCommand处理器从NiFi调用它:

Python包装器脚本:

  1. 接受来自STDIN的输入(这将是流文件的内容)
    • 您还可以使用ESC处理器的“ Command Arguments”属性将流文件属性作为参数放在命令行上
  2. STDIN输入转换为熊猫数据框
  3. 在不了解NiFi的任意Python脚本之间传递数据框
  4. 将最终数据帧输出为STDOUT

这将允许将传入的流文件内容发送到此包装脚本,使用包括的脚本进行的所有内部修改,然后将输出从STDOUT转换回流文件内容。