我有大约3500个csv,我转换成按日期划分的镶木地板(此数据跨越7天)。我想设置镶木地板文件大小,使每个文件都是1GB。目前我得到太多文件(每天400-600),大小在64到128 MB之间。我可以重新分区(使用重新分区/合并)到每个分区的x个文件(天)但我仍然有不同的文件大小,具体取决于一天中存在多少数据,所以第1天可能有20 GB,所以10个文件每个2gb但是第2天有10 GB,所以每个文件是1GB。我正在寻找如何设置/编码,使每个分区中的每个文件都是1GB。我正在使用pyspark,这是我用来编写镶木地板文件的代码。
csv_reader_df.write.partitionBy("DateId").option("compression","snappy").parquet('hdfs://mycluster/home/sshuser/snappy_data.parquet')
答案 0 :(得分:1)
镶木地板编写器将使用每个spark分区一个文件。 您必须重新分区或合并以管理文件数。
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')
答案 1 :(得分:0)
有关spark文档的信息:
可以使用SparkSession上的setConf方法或通过使用SQL运行SET key = value命令来完成Parquet的配置。
因此您可以以此设置parquet.block.size
!