SageMaker批量转换输入过滤求助:如何过滤ID列
SageMaker Batch Transform 过滤ID列问题解决
一、关于$[1:]的含义
$在SageMaker的JMESPath表达式里代表当前处理的输入单元,因为你设置了split_type="Line",所以每个单元就是CSV的一行,会被自动解析成字符串数组(比如一行1,hello会变成["1", "hello"])。$[1:]是JMESPath的切片语法,作用是过滤列:取数组中索引从1开始到末尾的所有元素,也就是去掉第一列(ID列),保留剩下的列(这里就是Text列)。
二、任务失败的解决方法(无需手动删除ID列)
你可以通过以下两种方式解决:
方法1:调整Batch Transform配置
问题大概率是没处理CSV表头或者模型输入格式不匹配,试试以下配置:
transformer.transform( batch_input_path, content_type="text/csv", split_type="Line", logs=True, input_filter="$[1:]", skip_header=1 # 跳过表头行,避免表头被传入模型 )
如果你的模型期望接收纯文本而非CSV单列,把input_filter改成join('', $[1:]),将过滤后的列转为纯文本:
transformer.transform( batch_input_path, content_type="text/csv", split_type="Line", logs=True, input_filter="join('', $[1:])", skip_header=1 )
方法2:在模型推理脚本中处理输入
如果Batch Transform的过滤配置不好调试,直接在模型的inference.py脚本里处理输入,只提取Text列:
import pandas as pd from io import StringIO def input_fn(input_data, content_type): if content_type == "text/csv": # 读取CSV,忽略表头(如果设置了skip_header=1,这里header=None没问题) df = pd.read_csv(StringIO(input_data), header=None) # 提取第二列(Text列)作为模型输入 return df.iloc[:, 1].values # 其他格式的处理逻辑...
内容的提问来源于stack exchange,提问作者stackword_0
相关产品推荐
相关产品推荐

