我实施了一个Spark Streaming作业,该作业将过去6个月中接收到的事件传输到HDFS中。
它正在HDFS中创建许多小文件,我希望它们的每个文件大小都为HDFS的128 MB(块大小)。
如果我使用追加模式,则所有数据将被写入一个实木复合地板文件中。
如何配置Spark为每128 MB数据创建一个新的HDFS Parquet文件?
答案 0 :(得分:2)
Spark将在写入之前在对象上写入与分区一样多的文件。这可能确实是低效的。要减少零件文件的总数,请尝试此操作,它会检查对象的总字节大小,然后将其表示为+1的最佳大小。
import org.apache.spark.util.SizeEstimator
val inputDF2 : Long = SizeEstimator.estimate(inputDF.rdd)
//find its appropiate number of partitions
val numPartitions : Long = (inputDF2/134217728) + 1
//write it out with that many partitions
val outputDF = inputDF.repartition(numPartitions.toInt)