在这里插入图片描述


可能目前处理的数据还在excel、sas数据、csv等比较容易展示的数据存储,但随着大模型AI的发展,我们需要处理的数据量呈指数级增长。

当涉及到项目中EDC数据的整合,使用传统关系型数据库也存在压力,因为我们主要关注数据的处理和整合,而没有太多的尽力花费时间在ETL的存储优化上,所以有一个高效的存储是很有必要的,Parquet 可以认为是当今存储数据的事实上的标准了。

Parquet 一种文件格式
主要优势:
1.数据压缩:通过应用各种编码和压缩算法,Parquet文件可减少内存、存储体积。

2.列式存储:采用列式存储能够支持快速读取。

3.与语言无关:支持不同编程语言操作 Parquet 文件。

4.开源格式

5.支持复杂数据类型

行存储vs列存储
在传统的基于行的存储中,数据存储为行序列。

如果要进行一些计算,引擎必须从头到尾扫描每一行

Parquet 是一种列格式,将数据存储在行组中

python操作parquet文件

1. 使用的包pyarrow

import pyarrow.parquet as pq
import pandas as pd

pyarrow.parquet模块,可以读取和写入Parquet文件,以及进行一系列与Parquet格式相关的操作。例如,可以使用该模块读取Parquet文件中的数据,并转换为pandas DataFrame来进行进一步的分析和处理。同时,也可以使用这个模块将DataFrame的数据保存为Parquet格式。

2. 使用

2.1 pandas操作parquet文件

df保存为parquet
def save_df_to_parquet(df, file):
    """
    将df保存为 parquet 格式
    
    Args:
        df (pd.DataFrame): 要保存的df数据
        file (str): 保存的文件路径
    """
    try:
        # 确保目录存在
        os.makedirs(os.path.dirname(file), exist_ok=True)
        
        # 将metadata_df保存到oss
        df.to_parquet(
            file,
            index=False,
            engine='pyarrow',          # 引擎
            compression='snappy'       # 压缩算法
        )
        logger.info(f"成功保存df到: {file}")
        
    except Exception as e:
        logger.error(f"df到oss时发生错误: {str(e)}")
        raise
读取 parquet为df
def read_parquet_to_df(file):
    """
    读取 parquet 文件为 DataFrame
    
    Args:
        file (str): 要读取的 parquet 文件路径
        
    Returns:
        pd.DataFrame: 读取的 DataFrame 数据
    """
    try:
        # 确保文件存在
        if not os.path.exists(file):
            raise FileNotFoundError(f"文件 {file} 不存在")
        
        # 读取 parquet 文件
        df = pd.read_parquet(
            file,
            engine='pyarrow'  # 与保存时使用的引擎一致
        )
        logger.info(f"成功读取 parquet 文件: {file}")
        return df
        
    except Exception as e:
        logger.error(f"读取 parquet 文件时发生错误: {str(e)}")
        raise

2.2 to_parquet 方法中 compression 参数选择的压缩算法

  • Snappy 是一种快速的压缩算法,由 Google 开发。它的主要特点是压缩和解压缩速度非常快,虽然压缩率可能不如一些其他算法(如 Gzip 或 Brotli)高,但它在处理大量数据时能够显著减少磁盘 I/O 和网络传输时间,同时不会对 CPU 造成太大负担。

  • 在数据存储和传输场景中,使用 Snappy 压缩算法可以在保证数据完整性的同时,优化存储空间和读写性能。

2.3 parquet 的数据类型

后续更新···

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐