如何直接从S3读取GZIP格式的csv文件并转换为pandas dataframe

4
我正在编写一个 airflow 任务来从 s3 中读取一个 gzip 文件。
首先,我获取了该对象的 key,这部分工作很顺利。
obj = self.s3_hook.get_key(key, bucket_name=self.s3_bucket)

obj看起来不错,大概像这样:

path/to/file/data_1.csv.gz

现在我想将内容读入 pandas 数据框中。我尝试了许多方法,但以下是我的当前迭代:

import pandas as pd
df = pd.read_csv(obj['Body'], compression='gzip')

这会返回以下错误:
TypeError: 's3.Object' object is not subscriptable

我做错了什么?我觉得我需要在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| 
1个回答

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 = '|')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接