0

我正在使用 AWS Personalize 构建推荐系统。用户个性化配方有 3 个数据集输入:交互、user_metadata 和 item_metadata。我无法导入包含boolean字段的用户元数据。我创建了以下架构:

user_schema = {
  "type": "record",
  "name": "Users",
  "namespace": "com.amazonaws.personalize.schema",
  "fields": [
      {
          "name": "USER_ID",
          "type": "string"
      },
      {
          "name": "type",
          "type": [
            "null",
            "string"
          ],
          "categorical": True
      },
      {
          "name": "lang",
          "type": [
            "null",
            "string"
          ],
          "categorical": True
      },
      {
          "name": "is_active",
          "type": "boolean"
      }
  ],
  "version": "1.0"
}

数据集 csv 文件内容如下所示:

USER_ID,type,lang,is_active
1234@gmail.com ,,geo,True
01027061015@mail.ru ,facebook,eng,True
03dadahda@gmail.com ,facebook,geo,True
040168fadw@gmail.com ,facebook,geo,False

我在 s3 存储桶上上传了给定的 csv 文件。当我尝试创建数据集导入作业时,它给了我以下异常:

InvalidInputException: An error occurred (InvalidInputException) when calling the CreateDatasetImportJob operation: Input csv has rows that do not conform to the dataset schema. Please ensure all required data fields are present and that they are of the type specified in the schema.

我测试过,它可以在没有booleanfield的情况下工作is_active。给定列中没有 NaN 值!

如果能够直接测试您的 pandas 数据框或 csv 文件是否符合给定的架构并可能获得更详细的错误消息,那就太好了。

有人知道如何格式化布尔字段来解决这个问题吗?

4

1 回答 1

0

我通过多次试验找到了解决方案。检查了 AWS Personalization 文档(https://docs.aws.amazon.com/personalize/latest/dg/how-it-works-dataset-schema.html#dataset-requirements),其中说:boolean (values true and false must be lower case in your data)

然后我尝试了几件事来找到解决方案,其中一件确实奏效了。但仍然很难找到解决方案并花费数小时。

解决方案:

  1. 将 pandas DataFrame 中的列转换为字符串(对象)格式。
  2. 小写TrueFalse字符串值来获取truefalse
  3. 将 pandas DataFrame 存储为 csv 文件

它导致 和 的小写truefalse

USER_ID,type,lang,is_active
1234@gmail.com ,,geo,true
01027061015@mail.ru ,facebook,eng,true
03dadahda@gmail.com ,facebook,geo,true
040168fadw@gmail.com ,facebook,geo,false

就这样!无需将架构中的“布尔”类型更改为“字符串”!希望他们能尽快解决这个问题,因为我联系了 AWS 技术支持并解决了同样的问题。

于 2021-07-16T09:02:49.113 回答