我是NiFi和Python的新手,我需要您的帮助才能将Flow File属性值传递给脚本。该脚本将嵌套的json转换为csv。当我在本地运行脚本时,它可以工作。
如何将FlowFile名称传递给src_json和tgt_csv?
谢谢
罗莎
ax.boxplot(data1, vert=False, vert=False)
答案 0 :(得分:0)
您可以选择几种方法来完成此任务。
ConvertRecord
处理器可以很大程度上完成此任务。如果您的嵌套JSON有问题,或者您有其他原因想要在Python脚本中执行此操作,请继续以下操作。 ExecuteScript
(更适合原型设计)和InvokeScriptedProcessor
(更能执行生产任务)使您可以在NiFi实例中运行Python(实际上是 Jython )脚本。这使您可以直接访问一些便捷的方法和功能。但是,由于Jython无法处理本地编译的Python库,因此您将无法在此代码中使用pandas
。 See here for instructions on configuring this processor和here for why pandas
will not work。 pandas
以获得某些功能,则需要将脚本另存为Python文件在本地文件系统上,并使用{{3 }}(如果需要向此处理器提供输入)或ExecuteStreamCommand
(如果它是流程中的第一个处理器)。这些处理器实际上运行诸如python my_python_script_with_pandas.py -somearg
(在ExecuteProcess
中)或python my_python_script_with_pandas.py
这样的shell命令,流文件内容为STDIN
(在ExecuteStreamCommand
中),并且{ {1}}被捕获为结果流文件内容。 当前,您的脚本正在静态文件位置查找传入的JSON文件,并将生成的CSV放置在另一个静态文件位置。您将需要更改脚本以执行以下操作之一:
STDOUT
或它们的任意组合的操作。然后,您的脚本将读取-inputfile /path/to/some_existing_file.json -outputfile ${flowfile_attribute_named_output_file}
和-inputfile
参数来确定路径。 -outputfile
ExecuteProcess
中读取传入的数据。然后处理JSON数据,将其转换为CSV,然后通过STDIN
返回。 NiFi会使用此数据,将其作为结果流文件的内容放置,然后将其发送到流中的下一个处理器。