使用jq多条件筛选Hadoop Yarn日志JSON并输出指定字段为CSV格式
实现需求的jq语法
直接使用以下命令即可从合并后的JSON文件中提取符合要求的字段,输出标准CSV格式:
jq -r ' # 过滤所有类型包含TASK的条目 map(select(.type | contains("TASK") | not)) | # 按规则提取各字段 ( # 提取AM_STARTED的startTime map(select(.type == "AM_STARTED") | .event.AMStarted.startTime)[0], # 提取JOB_INITED下所有字段 map(select(.type == "JOB_INITED") | .event.JobInited | (.launchTime, .totalMaps, .totalReduces))[], # 提取JOB_FINISHED的指定字段 map(select(.type == "JOB_FINISHED") | .event.JobFinished | ( .finishTime, (.totalCounters.groups[] | select(.name == "org.apache.hadoop.mapreduce.FileSystemCounter") | .counts[] | select(.name == "FILE_BYTES_READ").value), (.totalCounters.groups[] | select(.name == "org.apache.hadoop.mapreduce.FileSystemCounter") | .counts[] | select(.name == "FILE_BYTES_WRITTEN").value) ) )[] ) | tostring | join(", ") ' 输入文件名.json
可选调整
如果需要为每个字段增加双引号适配更严格的CSV导入规则,把最后一行的tostring | join(", ")替换为:
map("\"\(.)\"") | join(", ")
输出结果完全匹配示例:1636039435822, 1636039438569, 356, 100, 1636043211181, 1156766568459, 1720873364662
内容的提问来源于stack exchange,提问作者d-_-b
相关产品推荐
相关产品推荐

