Benthos中Bloblang type()函数失效问题求助
问题分析与解决办法
问题原因
CSV输入被Benthos解析后,所有字段值默认都是字符串类型——哪怕内容是数字。所以你用type()检测字段值类型时,得到的都是"string"而非"number",直接判断i.key.type == "number"自然不会匹配到任何字段,最终导致累加逻辑失效。
另外你的Bloblang表达式存在两处错误:
- 写法错误:
i.key.type无法获取字段值类型,应该用i.value.type() - 逻辑遗漏:未处理CSV中数字以字符串存储的情况,直接判断类型无法识别数字内容
解决步骤
1. 修正Bloblang累加逻辑
我们需要先尝试将字符串字段转换为数字,仅对转换成功的字段进行累加。修改后的Bloblang代码如下:
root.total_population = this.key_values() # 过滤掉无法转为数字的字段(如州名字段) .filter(i -> i.value.parse_float().is_ok()) # 累加转换后的有效数字 .fold(0, (tally, item) -> tally + item.value.parse_float().unwrap())
2. 完整修正后的Benthos配置
input: csv: paths: - data/population_data.csv - data/projects_data.csv parse_header_row: true lazy_quotes: true pipeline: processors: - switch: - check: '@path == "data/population_data.csv"' processors: - bloblang: | root.total_population = this.key_values() .filter(i -> i.value.parse_float().is_ok()) .fold(0, (tally, item) -> tally + item.value.parse_float().unwrap()) - check: '@path == "data/projects_data.csv"' processors: - bloblang: | root = this root.regioname = deleted()
关键逻辑说明
parse_float():尝试将字符串转换为浮点数,返回包含成功/失败状态的结果类型is_ok():判断转换是否成功,过滤掉非数字内容的字段unwrap():取出转换成功后的数字值,用于累加计算
可选优化
如果你的人口数据都是整数,可替换为parse_int()确保累加结果为整数类型:
root.total_population = this.key_values() .filter(i -> i.value.parse_int().is_ok()) .fold(0, (tally, item) -> tally + item.value.parse_int().unwrap())
内容的提问来源于stack exchange,提问作者user23733163
相关产品推荐
相关产品推荐

