python - 在 apache-nifi 中使用 executescript 处理器更新 csv 值失败
问题描述
我尝试从流文件中读取并使用 csv 中的默认值更新记录值。为此,我使用ExecuteScript
了带有以下 python 代码的处理器。
import sys
import re
import traceback
from org.apache.commons.io import IOUtils
from org.apache.nifi.processor.io import StreamCallback
from org.python.core.util import StringUtil
from java.lang import Class
from java.io import BufferedReader
from java.io import InputStreamReader
from java.io import OutputStreamWriter
flowfile = session.get()
record = flowfile.getAttribute('record_type')
if record == '0':
flowfile = session.putAttribute(flowfile,'record_type', 'NEW_USER')
session.transfer(flowFile, REL_SUCCESS)
session.commit()
elif record == '1':
flowfile = session.putAttribute(flowfile,'record_type', 'OLD_USER')
session.transfer(flowFile, REL_SUCCESS)
session.commit()
else:
flowfile = session.putAttribute(flowfile,'record_type', 'IGNORE')
session.transfer(flowFile, REL_SUCCESS)
session.commit()
writer.flush()
writer.close()
reader.close()
我的 csv 看起来像
id,record_type
1,0
2,1
3,2
4,0
结果应该是:
id,record_type
1,NEW_USER
2,OLD_USER
3,IGNORE
4,NEW_USER
我收到以下错误:
AttributeError:“NoneType”对象在第 13 行的脚本中没有属性“getAttribute”
它说record = flowfile.getAttribute('record_type')
这是错误的..
我不知道如何解决这个问题,因为我不擅长python
.
解决方案
那不是python,但根据作者的评论可能很时髦。
使用带有以下代码的 ExecuteGroovyScript 处理器:
def ff=session.get()
if(!ff)return
def map = [
'0': 'NEW_USER',
'1': 'OLD_USER',
]
ff.write{rawIn, rawOut->
rawOut.withWriter("UTF-8"){w->
rawIn.withReader("UTF-8"){r->
int rowNum = 0
//iterate lines from input stream and split each with coma
r.splitEachLine( ',' ){row->
if(rowNum>0){
//if not a header line then substitute value using map
row[1] = map[ row[1] ] ?: 'IGNORE'
}
//join and write row to output writer
w << row.join(',') << '\n'
rowNum++
}
}
}
}
REL_SUCCESS << ff
推荐阅读
- list - 在列表中查找模式,序言
- javascript - 动态路由:React/TypeScript
- django - Django 首次使用 Heroku 部署
- message - anylogic代理通信和消息发送
- flutter - 有谁知道是否可以扩展颤振小部件?
- c# - 设置 2 秒延迟在 xamarin 中不起作用
- javascript - 我可以使用leafletjs制作美国地图并在放大时显示城市的区号和办公室无线代码吗?
- javascript - 一些全局安装的 npm 包不工作
- javascript - React-三纤 useEffect , useState, THREE.Clock
- regex - React Natice RegEx 验证移动应用程序上的输入