我正在编写一个气流作业来从 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)
弄清楚了:
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)