Объект Python Boto3 'StreamingBody' не имеет атрибута 'iter_lines'

Я использую Boto3 для чтения результатов моего запроса Athena в сценарии Python.

У меня есть следующий код, который отлично работает в AWS Lambda.

def get_athena_results(s3_bucket, s3_output_path, execution_id):
    s3client = boto3.client('s3')
    key = s3_output_path + '/' + execution_id + '.csv'
    obj = s3client.get_object(Bucket=s3_bucket, Key=key)
    results_iterator = obj['Body'].iter_lines()
    results = [r for r in results_iterator]
    return results

Когда я запускаю ту же функцию в AWS Glue Python Shell (не задание Spark), я получаю сообщение об ошибке:

Unexpected error: <class 'AttributeError'>
'StreamingBody' object has no attribute 'iter_lines'

Для меня это не имеет смысла, поскольку класс botocore.response.StreamingBody имеет метод iter_lines, и он отлично работает в AWS Lambda.

https://botocore.amazonaws.com/v1/documentation/api/latest/reference/response.html

Есть идеи, почему это происходит в AWS Glue Python Shell?

Спасибо


person Diego Serrano    schedule 04.09.2019    source источник
comment
Проверьте версию пакета boto3 в Glue   -  person Lamanus    schedule 05.09.2019
comment
Эта проблема возникает из-за несоответствия версий. Можете ли вы распечатать версии в вашем задании Glue, функции Lambda и сравнить? print(версия boto3:+boto3.__version__) print(версия botocore:+botocore.__version__)   -  person Prabhakar Reddy    schedule 05.09.2019
comment
Привет, я использовал ваш код @bdcloud и вижу boto3 version:1.9.130. Кажется, Бото Клея не последний доступный. stackoverflow.com/questions/52972342/update-boto3-for -aws-glue Я пытался обновить его с помощью подпроцессов, но запускал с проблемами прав пользователя. Есть идеи, как это исправить?   -  person Diego Serrano    schedule 05.09.2019
comment
@DiegoSerrano Можете ли вы попробовать установить версию, соответствующую лямбда-выражению, в вашей оболочке Glue python. Пожалуйста, обратитесь к stackoverflow.com/a/54852126/4326922 и укажите пакет как boto3==1.9.130 (версия от lambda ) и дайте мне знать, как это происходит   -  person Prabhakar Reddy    schedule 05.09.2019
comment
Вы пробовали предоставленное предложение? Это помогло?   -  person Prabhakar Reddy    schedule 10.09.2019


Ответы (1)


Ошибка произошла, поскольку на момент публикации вопроса Glue Boto3 находился в предыдущей версии VS версии, доступной в лямбда, где iter_lines() недоступен.

person Diego Serrano    schedule 13.01.2020