【问题标题】:How can I pass a pandas dataframe in Nifi from processor to processor?如何将 Nifi 中的 pandas 数据帧从处理器传递到处理器?
【发布时间】:2020-05-16 03:50:41
【问题描述】:
使用 Nifi,我想:
- 运行导出 pandas 数据帧的 Python 脚本
- 发送它,例如通过 ExecuteStreamCommand 输入和输出 pandas 数据帧的各种即插即用 Python 脚本,但不知道它们是通过 Nifi 运行的,而且我无法修改为使用 STDIN/STDOUT 而不是 pandas。
- 传递输出数据帧以进行进一步处理。
这可能吗?如果有,怎么做?
换一种说法:
- 第一个脚本:flowfile -> pandas
- 许多脚本:用熊猫做事
- 最后一个脚本:pandas -> 流文件
【问题讨论】:
标签:
python
pandas
dataframe
apache-nifi
【解决方案1】:
NiFi 的ExecuteScript 支持 Jython,它不允许 Python 原生库(pandas 是原生库),所以你不能直接在 NiFi 中执行这个动作。我建议你编写一个包含 Python shell 脚本,它执行以下操作并使用 ExecuteStreamCommand 处理器从 NiFi 调用它:
Python 包装脚本:
- 接受来自
STDIN 的输入(这将是流文件内容)
- 您还可以使用
ESC 处理器的“命令参数”属性将流文件属性作为参数放在命令行中
- 将
STDIN 输入转换为 pandas 数据帧
- 在不了解 NiFi 的任意 Python 脚本之间传递数据帧
- 将最终数据帧输出为
STDOUT
这将允许将传入的流文件内容发送到此包装脚本,使用包含的脚本进行所有内部修改,然后将输出从STDOUT 转换回流文件内容。