Spark如何合并多个小文件 Spark如何合并多个小文件
发布时间
阅读量:
阅读量
在Spark SQL进行ETL处理过程中,可能出现最终输出结果仅几百KB,但单个分区却包含上千个小文件的情况。其潜在影响如下:
- HDFS系统存在对文件数量的上限约束
- 导致磁盘存储资源被无谓占用(可能包含无效空文件)
- 在Hive中执行统计与计算任务时,会生成大量Map任务,从而降低整体运算效率
方案一:利用spark提供的coalesce()函数与repartition()函数进行处理
val rdd2 = rdd1.coalesce(8, true) (true表示是否shuffle)
val rdd3 = rdd1.repartition(8)
说明:
coalesce:coalesce()方法的功能是生成一个具有特定分区数量的新RDD。当该操作产生窄依赖时,无需执行shuffle过程,此时分区数目可能发生较大变化。若计算资源不足,未将参数设为true可能会导致错误。而repartition()方法则是在coalesce()中开启shuffle的情况下实现的。
方法二:减少Spark的并行度,即调整spark.sql.shuffle.partitions参数
通过distribute by语句按照分区字段进行数据划分,除非每
全部评论 (0)
还没有任何评论哟~
