我正在尝试读取存储在S3存储桶中的单个实木复合地板文件,并使用boto3将其转换为熊猫数据帧。
答案 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")