【发布时间】:2022-08-05 17:47:33
【问题描述】:
将 python 3.9 与 Pandas 1.4.3 和 PyArrow 8.0.0 一起使用。
我有几个镶木地板文件(都具有相同的架构),我想将它们合并到某个阈值(不是固定大小,但不高于阈值)。
我有一个目录,我们称它为input,其中包含镶木地板文件。
现在,如果我使用 os.path.getsize(path) 我会在磁盘上获得大小,但合并 2 个文件并取该大小的总和(即 os.path.getsize(path1) + os.path.getsize(path2)) 自然会赢\'由于元数据和其他因素,t 会产生良好的结果。
在将文件写入镶木地板之前,我尝试了以下操作以查看是否可以对文件大小进行某种指示。
print(df.info())
print(df.memory_usage().sum())
print(df.memory_usage(deep=True).sum())
print(sys.getsizeof(df))
print(df.values.nbytes + df.index.nbytes + df.columns.nbytes)
我知道大小在很大程度上取决于压缩、引擎、模式等,因此我想简单地考虑一个因素。 简单地说,如果我想要每个文件 1mb 的阈值,那么实际阈值为 4mb,因为我假设压缩会将数据压缩 75%(4mb -> 1mb)
所以总的来说我会有类似的东西
compressed_threshold_in_mb = 1
compression_factor = 4
并且保持将数据附加到合并数据框中的条件是检查两者的乘积,即:
if total_accumulated_size > compressed_threshold_in_mb * compression_factor:
假设total_accumulated_size 是数据帧在磁盘上的重量的累加器
-
这是否解决了您的问题pandas.pydata.org/docs/reference/api/…?
-
另见
pandas_df.info()
标签: python pandas dataframe pyspark pyarrow