java输出文件大小_你如何控制输出文件的大小?

在考虑目标文件大小,内存使用和执行时间时,这是我完善的方法 . 这些文件还包括snappy压缩和字典编码 .

我的HDFS Blocksize是128兆(128 * 1024 * 1024):

dfs.blocksize

134217728

这是我最后的镶木地板文件,它们都非常接近hdfs块大小 .

133916650 2018-07-06 07:05 /year=2018/month=01/HoldingDetail_201801_0001.parquet

133459404 2018-07-06 07:05 /year=2018/month=01/HoldingDetail_201801_0002.parquet

133668445 2018-07-06 07:05 /year=2018/month=01/HoldingDetail_201801_0003.parquet

134004329 2018-07-06 07:06 /year=2018/month=01/HoldingDetail_201801_0004.parquet

134015650 2018-07-06 07:06 /year=2018/month=01/HoldingDetail_201801_0005.parquet

132053162 2018-07-06 07:06 /year=2018/month=01/HoldingDetail_201801_0006.parquet

132917851 2018-07-06 07:06 /year=2018/month=01/HoldingDetail_201801_0007.parquet

122594040 2018-07-06 07:06 /year=2018/month=01/HoldingDetail_201801_0008.parquet

这就是我这样做的方式..

A.想出大量的行来生成一堆大约10兆左右的SMALL镶木地板文件 . 就我而言,我选择了200,000条记录 . 许多较小的镶木地板文件比一个大型镶木地板文件更节省空间,因为如果单个文件中的数据具有更多种类,则字典编码和其他压缩技术将被放弃 . 一次写出大约10兆也会释放内存 .

您的文件将如下所示:

07916650 2018-07-06 07:05 /year=2018/month=01/HoldingDetail_201801_0001.parquet

12259404 2018-07-06 07:05 /year=2018/month=01/HoldingDetail_201801_0002.parquet

11368445 2018-07-06 07:05 /year=2018/month=01/HoldingDetail_201801_0003.parquet

07044329 2018-07-06 07:06 /year=2018/month=01/HoldingDetail_201801_0004.parquet

13145650 2018-07-06 07:06 /year=2018/month=01/HoldingDetail_201801_0005.parquet

08534162 2018-07-06 07:06 /year=2018/month=01/HoldingDetail_201801_0006.parquet

12178451 2018-07-06 07:06 /year=2018/month=01/HoldingDetail_201801_0007.parquet

11940440 2018-07-06 07:06 /year=2018/month=01/HoldingDetail_201801_0008.parquet

09166540 2018-07-06 07:05 /year=2018/month=01/HoldingDetail_201801_0009.parquet

12594044 2018-07-06 07:05 /year=2018/month=01/HoldingDetail_201801_0010.parquet

11684245 2018-07-06 07:05 /year=2018/month=01/HoldingDetail_201801_0011.parquet

07043129 2018-07-06 07:06 /year=2018/month=01/HoldingDetail_201801_0012.parquet

13153650 2018-07-06 07:06 /year=2018/month=01/HoldingDetail_201801_0013.parquet

08533162 2018-07-06 07:06 /year=2018/month=01/HoldingDetail_201801_0014.parquet

12137851 2018-07-06 07:06 /year=2018/month=01/HoldingDetail_201801_0015.parquet

11943040 2018-07-06 07:06 /year=2018/month=01/HoldingDetail_201801_0016.parquet

B.创建一个包含文件大小的所有较小的镶木地板文件的列表,当它们一起添加时不超过您的HDFS块大小 . 在上面的例子中:

/year=2018/month=01/HoldingDetail_201801_0001.parquet

to

/year=2018/month=01/HoldingDetail_201801_0012.parquet

plus

/year=2018/month=01/HoldingDetail_201801_0014.parquet

占用133,408,651字节 .

C.打开一个名为HoldingDetail_201801_temp.parquet的新文件

一次读取列表中的所有较小文件,并将它们写入临时文件作为镶木地板ROW GROUP . 将每个文件作为一个行组写入是非常重要的,它保留了压缩编码并保证写入的字节数(减去模式元数据)与原始文件大小相同 .

删除列表中的所有较小文件 . 将临时文件重命名为HoldingDetail_201801_0001.parquet .

对剩余的较小文件重复步骤B和C以创建* _0002.parquet,* _0003.parquet,* _0004.parquet等,它们将是大小刚好在hdfs块大小之下的目标文件 .

(我还添加一个检查,如果文件大小的总和> 0.95 * dfs.blocksize然后继续并合并找到的文件)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值