Spark Streaming创建许多小文件

时间:2018-08-04 02:51:49

标签: apache-spark hadoop pyspark

我实施了一个Spark Streaming作业,该作业将过去6个月中接收到的事件传输到HDFS中。

它正在HDFS中创建许多小文件,我希望它们的每个文件大小都为HDFS的128 MB(块大小)。

如果我使用追加模式,则所有数据将被写入一个实木复合地板文件中。

如何配置Spark为每128 MB数据创建一个新的HDFS Parquet文件?

1 个答案:

答案 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)