如何用Apache NiFi的Python ScriptTransformRecord将JSON时间戳转日期?
Apache NiFi 1.25 用Python ScriptTransformRecord转换JSON时间戳解决方案
配置前提
- 确保处理器关联的Record Reader为
JsonTreeReader,Record Writer为JsonRecordSetWriter。若JSON结构固定,可开启Reader的"Infer Schema"自动推断,或手动指定匹配的JSON Schema。
核心Python转换脚本
将以下脚本粘贴到ScriptTransformRecord的"Script"属性中,实现时间戳转日期格式(支持保留原timestamp字段并新增格式化日期,或直接替换):
import datetime def transform(record): # 遍历posts历史数组 posts_list = record.get("impressions_history_posts_seen", []) for post in posts_list: string_map = post.get("string_map_data", {}) time_dict = string_map.get("Time", {}) ts = time_dict.get("timestamp") if ts is not None: # 转换为本地时区的日期字符串,格式可自定义(如"%Y-%m-%dT%H:%M:%SZ"表示UTC ISO格式) formatted_date = datetime.datetime.fromtimestamp(ts).strftime("%Y-%m-%d %H:%M:%S") # 新增格式化日期字段 time_dict["formatted_time"] = formatted_date # 若需替换原timestamp字段,取消下方注释 # time_dict["timestamp"] = formatted_date return record
关键注意事项
- 时区处理:若需UTC时间,替换日期转换代码为
datetime.datetime.fromtimestamp(ts, datetime.timezone.utc).strftime("%Y-%m-%d %H:%M:%SZ") - 空值防护:使用
get()方法带默认值,避免因字段缺失引发报错 - 语法检查:Python脚本严格用4空格缩进,避免语法错误
常见报错排查
- 字段找不到:检查
JsonTreeReader的schema配置,确保与输入JSON结构匹配,或开启"Infer Schema" - Python语法错误:核对脚本缩进、括号配对,确保NiFi内嵌Python环境支持所用语法(NiFi 1.25基于Python 3.x)
内容的提问来源于stack exchange,提问作者user23343017
相关产品推荐
相关产品推荐

