📜  pandas 数据框到 parquet s3 - Python (1)

📅  最后修改于: 2023-12-03 15:33:24.572000             🧑  作者: Mango

Pandas 数据框到 Parquet S3 - Python

在数据分析过程中,我们通常需要将数据存储到云端,而S3是一个经济高效的云端存储方式。因此,将Pandas数据框存储到S3中是非常常见的需求。本文将介绍如何使用Python将Pandas数据框存储到S3中的Parquet格式。

Parquet简介

Parquet是一种列式存储格式(Columnar Storage Format),与行式存储格式(Row Storage Format)相对应。相比行式存储,在进行查询、过滤、聚合等操作时,Parquet在计算机资源利用率和性能上有一定的优势。而且,它与Hadoop、Spark、Presto等大数据处理框架有很好的兼容性。因此,将数据存储成Parquet格式是非常有意义的。

代码实现

首先,需要安装以下依赖:

  • pyarrow
  • s3fs
  • pandas

可以使用以下命令进行安装:

!pip install pyarrow s3fs pandas

接下来,我们需要使用AWS的S3服务。因此,您需要设置S3的访问密钥和密钥ID。您可以在这里了解如何创建s3访问者,https://aws.amazon.com/s3/。

在您的Python脚本中,您需要从pyarrow和s3fs导入以下内容:

import pyarrow.parquet as pq
import s3fs

使用Pandas生成一些示例数据:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'col1': np.random.rand(10),
    'col2': np.random.rand(10),
    'col3': np.random.rand(10),
})

接下来,我们需要将数据框转换为Parquet格式。根据数据框大小和计算机配置不同,转换所需的时间可能会有所不同。一般来说,使用pyarrow将数据框转换为Parquet格式比使用Pandas更有效率。

table = pa.Table.from_pandas(df)
pq.write_table(table, 'example.parquet')

Table.from_pandas()方法将Pandas DataFrame转换为pyarrow表格格式。使用pyarrow.parquet.write_table()将表格写入Parquet文件'example.parquet'中。

现在,我们已经将数据存储到本地文件中。接下来,我们将使用s3fs和pyarrow将示例数据框存储到S3中的Parquet格式。

首先,需要指定S3上要存储的Parquet文件的名称和S3存储桶的名称。例如,如果您要将文件example.parquet存储到名为my-bucket的存储桶中,则可以使用以下代码:

s3_file_name = 's3://my-bucket/example.parquet'

接下来,您需要使用以下代码指定将要使用的S3文件系统:

fs = s3fs.S3FileSystem(
    key='ACCESS-KEY', 
    secret='SECRET-KEY', 
    client_kwargs={'region_name': 'REGION-NAME'})

其中,'ACCESS-KEY'和'SECRET-KEY'是您在AWS上创建的s3访问密钥和密钥ID,'REGION-NAME'是您的s3存储桶在哪个AWS区域。

最后,使用以下代码将数据框存储到S3中的Parquet格式:

pq.write_to_dataset(
    table=table,
    root_path=s3_file_name,
    filesystem=fs,
    preserve_index=False
)

这个过程可能要花费一些时间,取决于您的数据框大小和计算机资源。

总结

本文介绍了如何将Pandas数据框存储为Parquet格式,并将其存储到S3中。作为一种高效的列式存储格式,Parquet在处理大量数据时表现良好。S3作为经济便捷的云端存储方式,广泛应用于数据分析和大数据处理中。