Python brotli如何在INT64上实现比INT32更好的拼花文件压缩?

Python brotli如何在INT64上实现比INT32更好的拼花文件压缩?,python,pandas,parquet,pyarrow,brotli,Python,Pandas,Parquet,Pyarrow,Brotli,我做了一些实验,用brotli压缩将随机整数的数据帧保存到拼花地板上。我的一个测试是找出存储为32位整数与64位整数之间的大小比: df=pd.DataFrame( random.randint(010000000,大小=(1000000,4)),列=[“a”,“b”,“c”,“d”] ) df.astype(“Int32”)to_拼花地板(“/tmp/i32.parquet”,compression=“brotli”) i32_size=int(路径(“/tmp/i32.parquet”).s

我做了一些实验,用brotli压缩将随机整数的数据帧保存到拼花地板上。我的一个测试是找出存储为32位整数与64位整数之间的大小比:

df=pd.DataFrame(
random.randint(010000000,大小=(1000000,4)),列=[“a”,“b”,“c”,“d”]
)
df.astype(“Int32”)to_拼花地板(“/tmp/i32.parquet”,compression=“brotli”)
i32_size=int(路径(“/tmp/i32.parquet”).stat().st_size)
df.astype(“Int64”)to_拼花地板(“/tmp/i64.parquet”,compression=“brotli”)
i64_size=int(路径(“/tmp/i64.parquet”).stat().st_size)
打印(i64\u大小/i32\u大小)
我希望这会输出一些大于1的数字,因为我希望INT64比INT32大,但实际上我得到了~0.96。为什么呢


我已经用
拼花工具检查过了,文件肯定分别保存为INT32和INT64。如果我尝试使用gzip压缩,我会得到一个大于1的比率。

大小是多少,而使用
compression=None
会得到什么?@HeapOverflow 15917181和15360289分别用于32位和64位。在没有压缩的情况下,我得到了18478908和33167196,因此64位大约是预期的1.8倍。因此,在没有压缩的情况下,32位有18478908-16000000=2478908字节的开销,而64位只有33167196-32000000=1167196字节的开销。这是预期的吗?我不确定,我想这是我问题的一部分。根据他们的文档,parquet确实试图以一种有效的表示形式存储整数(我所有的都小到32位),但我不确定细节。当我说‘如预期’时,我的意思是比率大于1。因为它在gzip下也大于1,所以我认为它更多的是关于brotli而不是拼花地板本身的表现。或者可能是两者的协同组合。我不认为这个例子是相关的,因为生成的数据没有使用int64的全部范围,而parquet在压缩时可以利用这一点。为int64生成数据时,应使用
np.random.randint(0,2**63-1,大小=…)
和int32
np.random.randint(0,2**31-1,大小=…)