如何在python中的S3中从pandas数据帧写入镶木地板文件

时间:2018-11-21 16:13:31

标签: python-3.x amazon-s3 parquet

我有一个熊猫数据框。我想将此数据帧写入S3中的镶木地板文件中。 我需要相同的示例代码。我尝试用Google搜索它。但我无法获得有效的示例代码。

4 个答案:

答案 0 :(得分:4)

供我参考,我有以下代码可用。

import zeep

要使用s3_url = 's3://bucket/folder/bucket.parquet.gzip' df.to_parquet(s3_url, compression='gzip') ,需要安装to_parquetpyarrow。另外,请确保位于fastparquet文件夹的configcredentials文件中有正确的信息。

编辑:此外,还需要.aws。参见https://stackoverflow.com/a/54006942/1862909

答案 1 :(得分:4)

下面的函数在缓冲区中获取镶木地板输出,然后将buffer.values()写入S3,而无需在本地保存镶木地板

此外,由于要创建s3客户端,因此可以使用aws s3密钥创建凭据,这些密钥可以存储在本地,气流连接或aws secrets管理器中

def dataframe_to_s3(s3_client, input_datafame, bucket_name, filepath, format):

        if format == 'parquet':
            out_buffer = BytesIO()
            input_datafame.to_parquet(out_buffer, index=False)

        elif format == 'csv':
            out_buffer = StringIO()
            input_datafame.to_parquet(out_buffer, index=False)

        s3_client.put_object(Bucket=bucket_name, Key=filepath, Body=out_buffer.getvalue())

S3_client只是boto3客户端对象。希望这会有所帮助!

礼貌-https://stackoverflow.com/a/40615630/12036254

答案 2 :(得分:2)

我们可以合并pyarrowboto3

快速示例代码:

def main():
    data = {0: {"data1": "value1"}}
    df = pd.DataFrame.from_dict(data, orient='index')
    write_pandas_parquet_to_s3(
        df, "bucket", "folder/test/file.parquet", ".tmp/file.parquet")


def write_pandas_parquet_to_s3(df, bucketName, keyName, fileName):
    # dummy dataframe
    table = pa.Table.from_pandas(df)
    pq.write_table(table, fileName)

    # upload to s3
    s3 = boto3.client("s3")
    BucketName = bucketName
    with open(fileName) as f:
       object_data = f.read()
       s3.put_object(Body=object_data, Bucket=BucketName, Key=keyName)

答案 3 :(得分:1)

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

安装do;

pip install awswrangler

如果要将熊猫数据框作为拼花文件写入S3,请这样做;

import awswrangler as wr
wr.s3.to_parquet(
    dataframe=df,
    path="s3://my-bucket/key/my-file.parquet"
)