2023年11月26日发(作者:)
Spark⼩⽂件合并
1.问题描述
最近使⽤spark sql执⾏etl时候出现了,最终结果⼤⼩只有⼏百k,但是⼩⽂件⼀个分区有上千的情况。
危害:
1. hdfs有最⼤⽂件数限制
2. 浪费磁盘资源(可能存在空⽂件);
3. hive中进⾏统计,计算的时候,会产⽣很多个map,影响计算的速度。
2.解决⽅法
1. ⽅法⼀:通过spark的coalesce()⽅法和repartition()⽅法
val rdd2 = ce(8, true) (true表⽰是否shuffle)
val rdd3 = ition(8)
说明:
coalesce:coalesce()⽅法的作⽤是返回指定⼀个新的指定分区的Rdd,
如果是⽣成⼀个窄依赖的结果,那么可以不发⽣shuffle,
分区的数量发⽣激烈的变化,计算节点不⾜,不设置true可能会出错。
repartition:coalesce()⽅法shuffle为true的情况。
1. ⽅便的话,可以采⽤coalesce()⽅法和repartition()⽅法
2. 如果任务逻辑简单,数据量少,可以直接降低并⾏度


发布评论