如何应对SparkSQL DataFrame保存到hdfs时出现的过多小文件问题
2015-07-08 22:40
260 查看
原因就不解释了,总之是因为多线程并行往hdfs写造成的(因为每个DataFrame/RDD分成若干个Partition,这些partition可以被并行处理)。
其结果就是一个存下来的文件,其实是hdfs中一个目录,在这个目录下才是众多partition对应的文件,最坏的情况是出现好多size为0的文件。
如果确实想避免小文件,可以在save之前把DaraFrame的partition设为0: (当然,这必然影响程序效率)
1. 如果是Spark 1.3.x, 可以调用函数如下:
【DataFrame2】=【DataFrame1】.repartition(1);
【DataFrame2】.save(path);
2. 如果是Spark 1.4.0, 可以调用如下函数:
【DataFrame2】=【DataFrame1】.coalecse(1, false)
其结果就是一个存下来的文件,其实是hdfs中一个目录,在这个目录下才是众多partition对应的文件,最坏的情况是出现好多size为0的文件。
如果确实想避免小文件,可以在save之前把DaraFrame的partition设为0: (当然,这必然影响程序效率)
1. 如果是Spark 1.3.x, 可以调用函数如下:
【DataFrame2】=【DataFrame1】.repartition(1);
【DataFrame2】.save(path);
2. 如果是Spark 1.4.0, 可以调用如下函数:
【DataFrame2】=【DataFrame1】.coalecse(1, false)
相关文章推荐
- MySQL 之 触发器和事务控制
- linux下redis安装
- Oracle ORA-28001: the password has expired
- win7下在安装Oracle10g时出现【安装检测到系统的主 IP 地址是 DHCP 分配的地址】的错误的解决办法
- oracle 表空间管理
- Oracle listener静态注册和动态注册总结
- Oracle RMAN两种备份方式 – 备份集备份与镜像复制备份
- 【MySQL】MySql定时更改数据库字段
- mysql通过DATE_FORMAT将错误数据恢复
- 数据库优化-基准测试(二)
- SQL Server中的连接查询
- visual studio 2013 --"Microsoft SQL Server Data Tools package did not load correctly"
- MySql 存储引擎的选取
- MySql 存储引擎的选取
- mysql max和count、limit优化
- Oracle数据库之开发PL/SQL子程序和包
- mysql循环方法总结
- Oracle EM错误,java.lang.Exception: Exception in sending Request :: null
- c#第四次作业 c#操作MySQL数据库
- Oracle EM错误,java.lang.Exception: Exception in sending Request :: null 分类: Oracle 2015-07-08 21:24 44人阅读 评论(0) 收藏