如何使用boto3将S3中的单个实木复合地板文件读入pandas数据帧中?

时间:2018-06-25 16:03:04

标签: python pandas dataframe amazon-s3 boto3

我正在尝试读取存储在S3存储桶中的单个实木复合地板文件,并使用boto3将其转换为熊猫数据帧。

4 个答案:

答案 0 :(得分:2)

有关使用PyArrow将S3存储桶中的Parquet文件读入Pandas数据帧的信息,请访问:https://arrow.apache.org/docs/python/parquet.html

import pyarrow.parquet as pq
import s3fs

dataset = pq.ParquetDataset('s3://<s3_path_to_folder_or_file>', 
filesystem=s3fs.S3FileSystem(), filters=[('colA', '=', 'some_value'), ('colB', '>=', some_number)])
table = dataset.read()
df = table.to_pandas()

我更喜欢这种从S3读取Parquet的方式,因为它鼓励通过 filter 参数使用Parquet分区,但是有一个错误会影响此方法https://issues.apache.org/jira/browse/ARROW-2038

答案 1 :(得分:1)

找到了一种利用boto3软件包将镶木地板文件简单地读入数据帧的方法。

import boto3
import io
import pandas as pd

# Read the parquet file
buffer = io.BytesIO()
s3 = boto3.resource('s3')
object = s3.Object('my-bucket-name','path/to/parquet/file')
object.download_fileobj(buffer)
df = pd.read_parquet(buffer)

print(df.head())

答案 2 :(得分:0)

也许更简单:

import pyarrow.parquet as pq
import s3fs

s3 = s3fs.S3FileSystem()
df = pq.read_table('s3://blah/blah.parquet', filesystem=s3).to_pandas()

答案 3 :(得分:0)

对于python 3.6 +,AWS有一个名为aws-data-wrangler的库,可帮助实现Pandas / S3 / Parquet之间的集成

安装do;

pip install awswrangler

要使用awswrangler 1.x.x及更高版本从s3中读取单个实木复合地板文件,请执行;

import awswrangler as wr
df = wr.s3.read_parquet(path="s3://my_bucket/path/to/data_folder/my-file.parquet")