Python Boto3';流线型车身&x27;对象没有属性';国际热核聚变实验堆线&x27;

Python Boto3';流线型车身&x27;对象没有属性';国际热核聚变实验堆线&x27;,python,aws-lambda,boto3,aws-glue,botocore,Python,Aws Lambda,Boto3,Aws Glue,Botocore,我使用Boto3读取python脚本中Athena查询的结果 我有以下代码在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_bu

我使用Boto3读取python脚本中Athena查询的结果

我有以下代码在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 GluePython Shell中运行相同的函数时(不是Spark作业),我得到错误:

Unexpected error: <class 'AttributeError'>
'StreamingBody' object has no attribute 'iter_lines'
意外错误:
“StreamingBody”对象没有属性“iter_lines”
这对我来说没有意义,因为
botocore.response.StreamingBody
类有一个
iter\u lines
方法,它在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中发生这种情况吗


感谢

在发布问题时,发生了错误,因为Glue的Boto3是以前的版本,而lambda中提供的版本是,
iter_lines()
不可用。

检查Glue3中Boto3软件包的版本该问题似乎是因为版本不匹配而发生的。你能在你的胶水作业,Lambda函数和比较中打印版本吗?打印(“boto3版本:+boto3.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。Glue的Boto似乎不是最后一款。我尝试使用子进程更新它,但运行时存在用户权限问题。有没有办法修复它?@diegoserrao你能试着在你的Glue python shell中安装与lambda匹配的版本吗。请参考并提及boto3==1.9.130(lambda版本)的软件包,并告诉我您如何尝试提供的建议?有帮助吗?