提问者:小点点

如何在python中从S3中的pandas dataframe编写拼花文件


我有一个熊猫数据帧。我想写这个数据帧到拼花文件在S3。我需要一个同样的样本代码。我试图谷歌它,但我不能得到一个工作的示例代码。


共3个答案

匿名用户

供您参考,我有以下代码的作品。

s3_url = 's3://bucket/folder/bucket.parquet.gzip'
df.to_parquet(s3_url, compression='gzip')

为了使用to_parquet,您需要安装pyrow快速拼花。此外,请确保您在位于. aws文件夹的config凭据文件中具有正确的信息。

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

匿名用户

首先,确保您已将pyarrow或fastparquet与pandas一起安装。

然后安装boto3和aws cli。使用aws cli设置位于. aws文件夹中的配置和凭据文件。

下面是一个使用pyarrow和boto3创建临时拼花文件并发送到AWSS3的简单脚本。

不包括进口的示例代码:

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)

匿名用户

下面的函数获取缓冲区中的拼花输出,然后写入缓冲区。值()到S3,无需在本地保存拼花地板

此外,由于您正在创建s3客户端,因此可以使用aws s3密钥创建凭据,这些密钥可以存储在本地、airflow连接或aws secrets manager中

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_客户机只是一个boto3客户机对象。希望这有帮助!

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