如何将 GZIP csv 从 S3 直接读取到 pandas 数据帧中

Ash*_*y O 5 pandas

我正在编写一个气流作业来从 s3 读取 gzip 压缩文件。

首先我得到了对象的密钥,效果很好

obj = self.s3_hook.get_key(key, bucket_name=self.s3_bucket)
Run Code Online (Sandbox Code Playgroud)

obj 看起来不错,如下所示:

path/to/file/data_1.csv.gz
Run Code Online (Sandbox Code Playgroud)

现在我想将内容读入 pandas 数据帧。我已经尝试了很多事情,但这是我当前的迭代:

import pandas as pd
df = pd.read_csv(obj['Body'], compression='gzip')
Run Code Online (Sandbox Code Playgroud)

这将返回以下错误:

TypeError: 's3.Object' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我觉得我需要用 StringIO 或 BytesIO 做一些事情...我能够以字节的形式读取它,但认为有一种更直接的方法来获取数据帧

以防万一,当我解压并以 CSV 格式打开时,一行数据如下所示:

 9671211|ddc9979d5ff90a4714fec7290657c90f|2138|2018-01-30 00:00:12|2018-01-30 00:00:16.069048|42b32863522dbe52e963034bb0aa68b6|1909705|8803795|collect|\\N|0||0||0| 
Run Code Online (Sandbox Code Playgroud)

Ash*_*y O 7

弄清楚了:

obj = self.s3_hook.get_key(key, bucket_name=self.s3_bucket)
df = pd.read_csv(obj.get()['Body'], compression='gzip', header = None, sep = '|')
Run Code Online (Sandbox Code Playgroud)