首页 > 解决方案 > Apache NiFi:使用 ExecuteScript 处理器处理多个 csv

问题描述

我有一个 70 列的 csv。第 60 列包含一个值,该值决定记录是valid还是invalid。如果第 60 列有 0、1、6 或 7,则为valid. 如果它包含任何其他值,那么它的invalid.

我意识到这个功能不可能完全依赖于改变 Apache NiFi 中处理器的属性。因此,我决定使用executeScript processor并添加此 python 代码作为文本正文。

import csv

valid =0
invalid =0
total =0
file2 = open("invalid.csv","w")
file1 = open("valid.csv","w")

with  open('/Users/himsaragallage/Desktop/redder/Regexo_2019101812750.dat.csv') as f:
    r = csv.reader(f)
    for row in f:
        # print row[1]
        total +=1

        if row[59] == "0" or row[59] == "1" or row[59] == "6" or row[59] == "7":
            valid +=1
            file1.write(row)
        else:
            invalid += 1
            file2.write(row)
file1.close()
file2.close()
print("Total : " + str(total))
print("Valid : " + str(valid))
print("Invalid : " + str(invalid))

我不知道如何在执行脚本处理器中使用会话和代码,如this question所示。所以我只是写了一个简单的python代码,并将有效和无效数据定向到不同的文件。我使用的这种方法有很多局限性

  1. 我希望能够动态处理具有不同文件名的 csv。
  2. 发送无效数据的 csv 也必须与输入 csv 具有相同的文件名。
  3. 我的redder文件夹中大约有 20 个 csv。所有这些都必须一次性处理。

希望您能建议我执行以下操作的方法。随时通过编辑我使用的python代码甚至完全使用一组不同的处理器并完全排除使用ExecuteScript Processer

标签: pythoncsvapache-nifidata-cleaning

解决方案


这是有关如何使用处理器的完整分步说明QueryRecord

基本上,您需要设置突出显示的属性

在此处输入图像描述


推荐阅读