如何为SageMaker Batch Transform作业的输出文件指定名称?

时间:2019-11-05 15:58:34

标签: python pandas amazon-sagemaker

我在AWS SageMaker中设置了一个批量转换作业。当前,这使用一些输入数据和预训练的模型。作业的编排是使用boto3 python库在lambda中完成的。

我遇到的困难是指定输出文件名称的好方法,在我们的例子中是predictions.csv。理想情况下,我们希望为此名称添加时间戳。

我尝试做的第一件事是通过参数将文件名应用于pandas.to_csv()函数。但是,仅进行此更改,SageMaker然后失败,并显示以下错误:

  

TypeError:视图函数未返回有效响应。该函数返回None或不返回return语句结束。

这是一个非常奇怪的错误,尤其是考虑到导致它的代码更改。

我还尝试将文件名应用于SageMaker transformer对象的一部分output_path参数。这仅用于指定S3文件夹路径,并在文件名末尾添加文件名只会导致一个奇怪的s3文件夹(例如output/stillafolder.csv/predictions.csv)。

我发现允许我更改输出文件名的唯一方法是更改​​输入文件名,因为我观察到的一种行为(尽管我没有找到任何相关文档)是输出文件名会默认情况下,匹配输入文件名。

尽管这对我当前的目的而言不是很好,所以任何建议将不胜感激!

1 个答案:

答案 0 :(得分:0)

根据SageMaker Developer Documentation

  

对于每个用作转换作业输入的S3对象,批处理转换将带有.out后缀的转换数据存储在输出前缀中相应位置的子文件夹中。

,您不能告诉SageMaker生成特定的文件名。它将获取输入文件,并将.out附加到每个文件中。 python SDK中的output_path映射到我上面链接到的S3OutputPath数据字段,其目的是指定不同的存储桶和文件夹结构,而不是文件名本身。

如果需要特定的文件名,则应在SageMaker调用后添加S3调用,以将结果文件移动到所需的名称/位置。如果您输入了多个文件,并且想要一个输出,则需要添加代码来连接输出。