Python 拼花地板文件的大小是否大于字符串数据中的csv?

Python 拼花地板文件的大小是否大于字符串数据中的csv?,python,pandas,csv,parquet,pyarrow,Python,Pandas,Csv,Parquet,Pyarrow,我有一个大小等于170kB的csv,当我将它们转换为拼花文件时,大小是1.2MB。数据结构是12列带字符串 作为pd进口熊猫 将pyarrow作为pa导入 导入pyarrow.parquet作为pq csv_filename=../files/test.csv 拼花_filename='../files/sample.parquet' chunksize=1 pqwriter=无 对于i,enumeratepd.read_csvcsv_文件名中的df,分隔符=“”,chunksize=chunk

我有一个大小等于170kB的csv,当我将它们转换为拼花文件时,大小是1.2MB。数据结构是12列带字符串

作为pd进口熊猫 将pyarrow作为pa导入 导入pyarrow.parquet作为pq csv_filename=../files/test.csv 拼花_filename='../files/sample.parquet' chunksize=1 pqwriter=无 对于i,enumeratepd.read_csvcsv_文件名中的df,分隔符=“”,chunksize=chunksize: df=df.astypestr table=pa.table.from_pandasdf=df 对于第一个记录块 如果i==0: 创建一个拼花写入对象,给它一个输出文件 pqwriter=pq.ParquetWriterparquet\u文件名,table.schema,compression='gzip',use\u dictionary=False pqwriter.write_表格 合上拼花地板的书写器 如有需要: 关闭 df=pd.read\u拼花地板\u文件名 printdf.memory\u usagedeep=True 更新1: 我尝试了fastparquet,得到了933kB的尺寸

对于i,enumeratepd.read_csvcsv_文件名中的df,分隔符=“”,chunksize=chunksize: fastparquet.writeparquet_文件名,df,compression='gzip',append=True 更新2:
参数chunksize对文件大小有影响。如果较大,则尺寸减小。使用等于30的chunksize,大小为76kB。

这主要归结为使用了非常小的块大小,从而禁用了柱状结构,从而消除了拼花地板格式的所有优点。拼花文件中的块是强制断开的,在两个块上不会应用优化

考虑到170KB对于拼花地板来说是一个非常小的尺寸,你根本不应该去拼花。通常情况下,合理的区块大小是指您的数据产生128MiB大小的区块,在某些情况下,较小的区块是有意义的,但对于大多数用例,单个区块或128MiB大小的区块是正确的选择


在区块内部,Parquet应用了各种压缩和编码技术,以高效地利用CPU和大小效率逐列存储数据。这些技术能够处理的数据越多,就越有效。将区块大小设置为一位数的值可以消除这些设置带来的任何好处,但也会增加文件本身的开销,因为Parquet还存储头和一些元数据,如每列区块的列统计信息。当chunk_size=1时,这意味着每一行将在文件中存储3-4次,甚至不考虑额外的元数据头。

这主要归结为使用了非常小的块大小,从而禁用了柱状结构,从而消除了拼花格式的所有优点。拼花文件中的块是强制断开的,在两个块上不会应用优化

考虑到170KB对于拼花地板来说是一个非常小的尺寸,你根本不应该去拼花。通常情况下,合理的区块大小是指您的数据产生128MiB大小的区块,在某些情况下,较小的区块是有意义的,但对于大多数用例,单个区块或128MiB大小的区块是正确的选择

在区块内部,Parquet应用了各种压缩和编码技术,以高效地利用CPU和大小效率逐列存储数据。这些技术能够处理的数据越多,就越有效。将区块大小设置为一位数的值可以消除这些设置带来的任何好处,但也会增加文件本身的开销,因为Parquet还存储头和一些元数据,如每列区块的列统计信息。当chunk_size=1时,这意味着每一行将在文件中存储3-4次,甚至不考虑额外的元数据头