Scala 什么';将大文件写入S3的最佳方式是什么?
我正在使用齐柏林飞艇和spark,我想从S3中获取一个2TB的文件,并在spark中对其进行转换,然后将其发送到S3,这样我就可以在Jupyter笔记本中使用该文件。转换非常简单 我把这个文件读作拼花文件。我想大约是2TB,但我不确定如何验证 它大约有10米的行和5列,所以它相当大Scala 什么';将大文件写入S3的最佳方式是什么?,scala,apache-spark,pyspark,parquet,apache-zeppelin,Scala,Apache Spark,Pyspark,Parquet,Apache Zeppelin,我正在使用齐柏林飞艇和spark,我想从S3中获取一个2TB的文件,并在spark中对其进行转换,然后将其发送到S3,这样我就可以在Jupyter笔记本中使用该文件。转换非常简单 我把这个文件读作拼花文件。我想大约是2TB,但我不确定如何验证 它大约有10米的行和5列,所以它相当大 我尝试了my_table.write.parquet(s3path)并尝试了my_table.write.option(“maxRecordsPerFile”,200000).parquet(s3path)。我怎样才
我尝试了
my_table.write.parquet(s3path)
并尝试了my_table.write.option(“maxRecordsPerFile”,200000).parquet(s3path)
。我怎样才能写出一个大拼花文件的正确方法? < P>这些是你可以考虑的要点……/P>
1) maxRecordsPerFile设置:
与
my_table.write.parquet(s3path)
Spark为每个任务写入一个文件
保存的文件数=正在保存的RDD/数据帧的分区数。因此,这可能会导致大得离谱的文件(当然,您可以重新分区数据并保存,重新分区意味着在网络上洗牌数据)
限制每个文件的记录数
my_table.write.option("maxRecordsPerFile", numberOfRecordsPerFile..yourwish).parquet(s3path)
它可以避免生成巨大的文件
2)如果你使用的是AWS EMR(EMRFS),这可能是你可以考虑的要点之一。
未使用EMRFS S3优化提交程序时:
- 使用S3A文件系统时
- 使用拼花以外的输出格式时,如ORC或文本
“fs.s3a.multipart.size
控制块的大小。有10K块的限制,因此您可以上载的最大文件大小为*10000。对于非常大的文件,请使用大于默认值“64M”的数字1000万行不一定很大,但我的计算表明,每一列都必须有一些大的json blob或其他什么?你能提供一些关于数据结构的详细信息吗。我应该如何选择每个文件的记录数?maxRecordsPerFile…你已经在你的问题中写了这个,对吗?我如何选择要使用的数字?我只是猜测而已gIt可以像Numrecordsperfile=1000万/(num executors*cores*2)是我可以提供的样本,或者如果您不知道1000万或2000万数据,那么计算大约,并用它替换1000万
.config("spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version", 2)
.config("spark.hadoop.mapreduce.fileoutputcommitter.cleanup-failures.ignored", true)
.config("spark.hadoop.parquet.enable.summary-metadata", false)
.config("spark.sql.parquet.mergeSchema", false)
.config("spark.sql.parquet.filterPushdown", true) // for reading purpose
.config("mapreduce.fileoutputcommitter.algorithm.version", "2")
.config("spark.sql.parquet.compression.codec", "snappy")
.getOrCreate()
.config("spark.hadoop.fs.s3a.fast.upload","true")
.config("spark.hadoop.fs.s3a.fast.upload","true")
.config("spark.hadoop.fs.s3a.connection.timeout","100000")
.config("spark.hadoop.fs.s3a.attempts.maximum","10")
.config("spark.hadoop.fs.s3a.fast.upload","true")
.config("spark.hadoop.fs.s3a.fast.upload.buffer","bytebuffer")
.config("spark.hadoop.fs.s3a.fast.upload.active.blocks","4")
.config("fs.s3a.connection.ssl.enabled", "true")