我用pyspark写了一个文件压缩器。它的工作方式是通过将目录的所有内容读取到spark dataframe中,然后执行重新分区操作以减少文件的数量。所需文件的数量通过以下公式计算:directory_size / wanted_file_size。
我面临的问题是压缩后的目录大小大于压缩前的目录大小。
例如:压缩前的目录大小为68 gb,包含1431个文件。在压缩之后,文件计数是145,目录大小是76 GB。本例中的所有文件都是Parquet的,并且在压缩序列之前和之后用Snappy压缩。
有人可以请帮助我了解为什么目录大小正在改变,我如何解决这个问题??
2条答案
按热度按时间0g0grzrc1#
这似乎是您的配置问题,它的分布不够。试着增加工人的数量,它会解决你的问题。这是数据不对称的典型问题
xwmevbvl2#
您可能可以使用
parquet-tools
检查这两组文件,以查找行组和列大小的差异,类似于OP执行here的操作。但我的第一个猜测是,最初编写的文件包含的数据集使用内部Parquet Encodings(Dictionary,Delta,RLE)之一可以更好地压缩,例如每个文件包含相同的日期,单调增加的数字/时间序列或类似的值。重新分区数据集(循环调度?),这些值会“随机”分布在新文件中,这使得Parquet压缩效率较低。