首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是有一个大的拼图文件好,还是有许多小的拼图文件更好?

是有一个大的拼图文件好,还是有许多小的拼图文件更好?
EN

Stack Overflow用户
提问于 2017-03-21 12:48:59
回答 2查看 31K关注 0票数 25

据我所知,hdfs会将文件分成类似64mb的块。我们有流式传输的数据,我们可以将它们存储到大型文件或中型文件中。列式文件存储的最佳大小是多少?如果我可以将文件存储到最小列为64mb的位置,是否会比拥有1 1gb的文件节省任何计算时间?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-21 13:24:57

目标是每个文件大约1 1GB (spark分区) (1)。

理想情况下,您应该使用snappy压缩(默认),因为snappy压缩拼图文件是可拆分的(2)。

使用snappy而不是gzip会显著增加文件大小,因此如果存储空间有问题,则需要考虑。

.option("compression", "gzip")是覆盖默认快速压缩的选项。

如果您需要调整Dataset/DataFrame/RDD的大小/重新分区,请调用.coalesce(<num_partitions>或worst case .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-file-splittable/

票数 30
EN

Stack Overflow用户

发布于 2019-12-31 03:00:19

请注意,拼图文件在内部拆分为row groups

https://parquet.apache.org/documentation/latest/

因此,通过使拼图文件更大,如果基线拼图文件不小/很小,行组仍然可以保持不变。在处理上没有很大的直接损失,但是相反,如果拼图文件更小/更小,那么读者有更多的机会利用可能更大/更优化的行组,例如行组不能跨越多个拼图文件。

此外,较大的拼图文件不会限制读取器的并行度,因为每个拼图文件可以在逻辑上分解为多个splits (由一个或多个行组组成)。

更大的拼图文件的唯一缺点是创建它们需要更多的内存。所以,如果你需要增加Spark executors的内存,你可以当心。

row groups是拼图文件进行垂直分区的一种方式。每个row group都有许多行块(每列一个行块,这是一种为parquet中的数据集提供水平分区的方法)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42918663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档