簡體   English   中英

如何在python的S3中從pandas數據幀寫入鑲木地板文件

[英]How to write parquet file from pandas dataframe in S3 in python

我有一個熊貓數據框。 我想將此數據框寫入 S3 中的鑲木地板文件。 我需要一個相同的示例代碼。我試着用谷歌搜索。 但我無法獲得有效的示例代碼。

供您參考,我有以下代碼有效。

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

為了使用to_parquet ,您需要安裝pyarrowfastparquet 此外,請確保位於.aws文件夾的configcredentials文件中包含正確的信息。

編輯:此外,還需要s3fs https://stackoverflow.com/a/54006942/1862909

首先確保你已經安裝了 Pandas 的 pyarrow 或 fastparquet。

然后安裝 boto3 和 aws cli。 使用 aws cli 設置位於 .aws 文件夾的配置和憑證文件。

這是一個使用pyarrowboto3創建臨時鑲木地板文件然后發送到 AWS S3 的簡單腳本。

不包括導入的示例代碼:

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)

下面的函數在緩沖區中獲取拼花輸出,然后將 buffer.values() 寫入 S3,無需在本地保存拼花

此外,由於您正在創建 s3 客戶端,因此您可以使用 aws s3 密鑰創建憑據,這些密鑰可以存儲在本地、氣流連接或 aws 機密管理器中

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

對於 python 3.6+,AWS 有一個名為aws-data-wrangler的庫,可以幫助 Pandas/S3/Parquet 之間的集成

安裝做;

pip install awswrangler

如果您想將您的 Pandas 數據幀作為鑲木地板文件寫入 S3,請執行;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM