如何在NiFi中的ExecuteStreamCommand处理器中读取文件

时间:2019-04-25 06:08:40

标签: python hadoop google-cloud-platform apache-nifi

我的最终目标是屏蔽一个特定文件中的数据。我想将文件从一个地方移到另一个地方。在此传输过程中,我必须使用Python脚本屏蔽数据。因此,我设计了以下流程:

Python

我使用pandas设计了一个NiFi脚本。我在Google Cloud Platform创建的虚拟机上运行此Python-2.7,其中安装了NiFi-1.9.1import pandas as pd readFile = pd.read_csv("/path",sep=" ",header=None) readFile.columns = ['IP'] readFile['IP'] = readFile['IP'].replace(regex='((?<=[0-9])[0-9]|(?<=\.)[0-9])',value='X') readFile.to_csv("/path", sep=' ') 。下面是我的熊猫代码:

{{1}}

我有以下疑问:
1)使用getFile处理器,我正在将队列中的文件传递给下一个处理器,即ExecuteStreamCommand处理器。
2)另外,在我的Python代码中,我试图从GetFile处理器中传递的同一输入目录中读取数据,但现在文件已移至getfile> executestreamcommand之间的队列中。那怎么读呢?
3)执行python脚本后,如何使用putFile处理器将其保存回其他位置?

我是NiFi的新手,因此尝试了解基本知识。另外,我还附上了流程和错误屏幕截图。 enter image description here

2 个答案:

答案 0 :(得分:1)

ExecuteStreamCommand

流文件的内容作为stdin流传递到命令(在您的情况下为python)

因此,您必须使用以下代码:

readFile = pd.read_json(sys.stdin)

另一方面,如果您需要对流文件应用regexp替换,则可以尝试使用ReplaceText处理器而不是ExecuteStreamCommand

答案 1 :(得分:0)

您可能需要在 nifi 注册的 Volume 中提供 python .py 文件。

例如 opt/nifi/nifi-current/ 如果它是一个 docker 镜像