spark的DataFrame数据保存到hdfs产生过多小文件该怎么解决

写入过程产生过多小文件是因为多线程并行向hdfs写入造成的,所以可以再save之前设置dataframe的partitions设置为0,但是这样设置一定会影响spark写入的性能

val result: DataFrame = WorkOperator ( dataFrame, sparkSession ).controller ( operator )
      //df保存到hdfs
      //coalesce中的参数是指定写到hdfs的block的个数,避免产生过多的小文件,但是提前需要预估dataframe的大小
      val value: Dataset[Row] = result.coalesce(1)
      value.write.mode(SaveMode.Overwrite).save(dataDir + name)

使用上述方法进行设置,需要预估dataframe的大小,根据这个大小设置block的多少,保证了spark的性能

你可能感兴趣的:(spark的DataFrame数据保存到hdfs产生过多小文件该怎么解决)