2017-07-19 28 views
0

我有约3500 csv的,我转换成实木复合地板按日期分区(这些数据跨越7天)。我想设置parquet文件的大小,使每个文件都是1GB。目前我得到太多文件(每天400-600),大小在64到128 MB之间。我可以重新分区(使用重新分区/合并)到每个分区(日)的x个文件数量,但我仍然有不同的文件大小,具体取决于一天中存在多少数据,所以第1天可能有20 GB,因此10个文件每个都是2 GB第2天有10 GB,因此每个文件都是1 GB。我正在寻找如何设置/编码,以便每个分区中的每个文件都是1GB。我正在使用pyspark,这里是我用来编写实木复合地板文件的代码。如何在Azure HDInsight上的Spark中设置镶木块大小?

csv_reader_df.write.partitionBy("DateId").option("compression","snappy").parquet('hdfs://mycluster/home/sshuser/snappy_data.parquet') 

回答

0

实木复合地板编写器将每个火花分区一个文件做。 您必须重新分区或合并才能管理文件数量。

val PARQUET_BLOCK_SIZE: Int = 32 * 1024 * 1024 
val targetNbFiles: Int = 20 
csv_reader_df.coalesce(targetNbFiles).write.option("parquet.block.size",PARQUET_BLOCK_SIZE).partitionBy("DateId").option("compression","snappy").parquet('hdfs://mycluster/home/sshuser/snappy_data.parquet') 
相关问题