You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 04:02:02