【问题标题】:NiFi: Remove fixed number of header lines from fileNiFi:从文件中删除固定数量的标题行
【发布时间】:2017-01-13 18:10:53
【问题描述】:

我正在处理一个文件,我想删除(修剪)前 X 个标题行以仅保留数据,可能避免使用正则表达式。

谢谢

【问题讨论】:

    标签: header apache-nifi trim processor


    【解决方案1】:

    您可以使用 Nifi 中的 ExecuteScript 处理器删除前 X 个标题行。

    以下是我为自己编写的示例 Jython 脚本:

    import json
    import java.io
    from org.apache.commons.io import IOUtils
    from java.nio.charset import StandardCharsets
    from org.apache.nifi.processor.io import StreamCallback
    
    class PyStreamCallback(StreamCallback):
      def __init__(self):
            pass
      def process(self, inputStream, outputStream):
        text = IOUtils.readLines(inputStream, StandardCharsets.UTF_8)
        for line in text[3:]:
            outputStream.write(line + "\n") 
    
    flowFile = session.get()
    if (flowFile != None):
      flowFile = session.write(flowFile,PyStreamCallback())
      flowFile = session.putAttribute(flowFile, "filename", flowFile.getAttribute('filename').split('.')[0]+'_translated.json')
      session.transfer(flowFile, REL_SUCCESS)
    

    这显然会删除前 3 行,但您可以轻松修改它以删除更多或更少的行。

    希望对您有所帮助。

    【讨论】:

    • 谢谢!这也可以在 Python 中完成吗?不用准备代码,我只想知道 ExecuteScript 能不能用 Python 写。
    • 短答案 - 长答案 - 也许 :由于脚本引擎内部使用 Jython,所以您可以只使用纯 python 模块并尝试在使用 ExecuteScript 时使其与它一起工作。您可以获得更多信息here 它说 - 如果需要其他 python 模块,“考虑 ExecuteProcess 或(如果你有传入的流文件)可以执行命令行 python 的 ExecuteStreamCommand。”如果您喜欢这个答案,请考虑投票,谢谢。
    • @BiplobBiswas,在删除 n 个标题行后,我们可以将每一行发送到单独的流文件而不是单个流文件吗?
    • @prabhu 尽管这是一个单独的问题,但我通常建议为此创建一个新问题。但是,要从单个流文件创建单个流文件,请尝试使用 splitText 处理器。有关处理器的更多信息,请查看 - nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/…
    • 我不确定,也许你可以尝试 2 个阶段的 splitText,首先拆分 30k-40k 行(Line Split Count = 30k - 40k)然后尝试使用 Line Split Count = 1 的 splitText ...如果这不起作用,也许在两者之间添加另一个阶段。真的很抱歉,但我不知道使用 Nifi 分割大文件的更好方法
    猜你喜欢
    • 2020-10-14
    • 2023-03-26
    • 2013-08-06
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多