AWS Sagemaker использует паркетный файл для пакетного преобразования? - PullRequest
1 голос
/ 16 июня 2020

Я пытаюсь запустить задание вывода пакетного преобразования с использованием файла данных паркета, но ничего не могу найти. Везде говорится, что пакетное преобразование принимает формат только как text / csv или json. В целях тестирования я попытался использовать лямбда-функцию внутри учетной записи AWS для вызова данных parque, но задание пакетного преобразования так и не удалось. Имея ClientError: 400, ошибка анализа данных.

request = \
        {
            "TransformJobName": batch_job_name,
            "ModelName": model_name,
            "BatchStrategy": "MultiRecord",
            "TransformOutput": {
                "S3OutputPath": batch_output
            },
            "TransformInput": {
                "DataSource": {
                    "S3DataSource": {
                        "S3DataType": "S3Prefix",
                        "S3Uri": batch_input

                    }
                },
                "ContentType": "application/x-parquet", 
                "SplitType": "Line",
                "CompressionType": "None"
            },
            "TransformResources": {
                "InstanceType": "ml.m4.xlarge",
                "InstanceCount": 1
            }
        }
    client.create_transform_job(**request)
    return "Done"

В настоящее время я пытаюсь запустить задание пакетного преобразования sagemaker локально, используя файл данных parque. У меня есть изображение docker, которое я могу запустить для "обслуживания" в моем локальном терминале, и я могу вызывать данные с помощью службы REST API Postman из "localhost: 8080 / invocations", используя функцию ввода "Binary" для загрузки файла данных parque . Он работает нормально, и я вижу, как данные заполняются в теле почтальона. Однако я не могу использовать данные parque для пакетного преобразования.

Кто-нибудь успешно использовал файл parquet для преобразования и прогнозирования с помощью пакетного преобразования sagemaker?

Ответы [ 2 ]

1 голос
/ 22 июля 2020

Для SageMaker Batch Transform (или любых обслуживающих заданий) можно предоставить метод обучения с настраиваемым input_fn, который может использовать любой другой тип ввода, если для его обработки существует настраиваемый logi c. Мне удалось использовать его для входных данных avro.

Для файлов паркета должно работать что-то вроде следующего:

def input_fn(serialized_input_data, content_type="application/parquet"):
    logger.info("Deserializing input data.")
    ...
    # Process the serialized input.
    logger.info(f"Input deserialized.")
    return input_data

Дополнительная информация о пользовательских функциях здесь . Это ведет на страницу оценщика scikit-learn, но я думаю, что он поддерживается всеми типами объектов оценщика SageMaker.

0 голосов
/ 25 июня 2020

Пакетное преобразование Sagemaker, похоже, не поддерживает формат паркета, поэтому вам придется иметь свой собственный обходной путь для работы с набором данных паркета. Вы можете преобразовать свой набор данных parquet в набор данных, который поддерживает конечная точка вывода (например, text / csv или application / json), и использовать этот преобразованный набор данных в пакетном преобразовании. В искровом кластере вы можете сделать это очень просто:

sqlContext.read.parquet("input/parquet/location/").write.json("output/json/location")
...