我使用AWS Athena查询S3的原始数据。因为雅典娜将查询输出写到了我以前做的S3输出bucket中:
df = pd.read_csv(OutputLocation)
但这似乎是一种昂贵的方式。最近我注意到了boto3
的get_query_results
方法,它返回结果的复杂字典。
client = boto3.client('athena')
response = client.get_query_results(
QueryExecutionId=res['QueryExecutionId']
)
我面临两个主要问题:
get_query_results
的结果格式化为pandas
数据帧?get_query_results
只返回1000行。我怎么能用它得到两百万行呢?
get_query_results只返回1000行。如何使用它将200万行放入熊猫数据帧?
如果您尝试添加:
您将获得下一个错误:
如果直接从bucket s3获取文件(在下一个示例中是Pandas数据帧),则可以获得数百万行:
self.filename可以是:
因为雅典娜将文件命名为QueryExecutionId。我将为您编写所有代码,这些代码接受一个查询并返回一个包含所有行和列的数据框。
我有第一个问题的解决方案,使用以下函数
然后:
至于我的第二个问题和@EricBellet的请求,我还添加了分页方法,与在S3中加载雅典娜输出的结果相比,我发现这种方法效率低、耗时长:
它的格式不是很好,但我认为它能完成任务。。。
相关问题 更多 >
编程相关推荐