For*_*sed 12 hadoop apache-spark parquet
据我所知,hdfs会将文件拆分成类似64mb的块.我们有数据流入,我们可以将它们存储到大文件或中等大小的文件中.柱状文件存储的最佳大小是多少?如果我可以将文件存储到最小列为64mb的位置,那么它是否可以节省任何计算时间而不是1gb文件?
Gar*_*n S 15
目标是每个文件大约1GB(火花分区)(1).
理想情况下,你会使用snappy压缩(默认),因为snappy压缩的镶木地板文件是可拆分的(2).
使用snappy而不是gzip将显着增加文件大小,因此如果存储空间是一个问题,则需要考虑.
.option("compression", "gzip")
是覆盖默认snappy压缩的选项.
如果需要调整数据集/数据框/ RDD的大小/重新分区,请调用.coalesce(<num_partitions>
或最坏情况.repartition(<num_partitions>)
函数.警告:特别是重新分区但是合并会导致数据重新洗牌,因此请谨慎使用.
此外,镶木地板文件大小和所有文件通常应该大于HDFS块大小(默认128MB).
1)https://forums.databricks.com/questions/101/what-is-an-optimal-size-for-file-partitions-using.html 2)http://boristyukin.com/is-snappy-compressed -parquet文件,可分裂/
请注意,Parquet 文件在内部被拆分为 row groups
https://parquet.apache.org/documentation/latest/
因此,如果您的基准镶木地板文件不小/很小,则通过使镶木地板文件更大,行组仍然可以保持不变。对处理没有巨大的直接惩罚,但相反,如果您的镶木地板文件较小/很小,例如因为行组不能跨越多个镶木地板文件,则读者有更多机会利用可能更大/更优化的行组。
此外,较大的镶木地板文件不会限制读取器的并行性,因为每个镶木地板文件都可以在逻辑上分解为多个splits
(由一个或多个行组组成)。
较大的镶木地板文件的唯一缺点是创建它们需要更多的内存。因此,您可以注意是否需要增加 Spark 执行程序的内存。
row groups
是 Parquet 文件具有垂直分区的一种方式。每个row group
都有许多行块(每列一个,一种为镶木地板中的数据集提供水平分区的方法)。
归档时间: |
|
查看次数: |
10013 次 |
最近记录: |