Advertisement

Spark如何合并多个小文件 Spark如何合并多个小文件

阅读量:

在Spark SQL进行ETL处理过程中,可能出现最终输出结果仅几百KB,但单个分区却包含上千个小文件的情况。其潜在影响如下:

  1. HDFS系统存在对文件数量的上限约束
  2. 导致磁盘存储资源被无谓占用(可能包含无效空文件)
  3. 在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)

还没有任何评论哟~