我无法找到有关此主题的太多信息,但假设我们使用数据帧读取 10 个块的 parquet 文件,spark 自然会创建 10 个分区。但是,当数据帧读入文件来处理它时,它不会处理很大的数据与分区比率,因为如果它处理未压缩的文件,块大小会更大,这意味着分区也会更大。
因此,让我澄清一下,镶木地板已压缩(这些数字并不完全准确)。
1GB Par = 5 个块 = 5 个分区,可以解压到 5GB,使其成为 25 个块/25 个分区。但是,除非您对 1GB par 文件重新分区,否则您将只能使用 5 个分区,而最佳情况下应该是 25 个分区?或者说我的逻辑是错误的。
重新分区以提高速度有意义吗?还是我在思考这个问题是错误的。有人能解释一下吗?
假设:
- 1 个块 = 1 个 Spark 分区
- 1 个核心在 1 个分区上运行
Spark DataFrame 不会在内存中加载 parquet 文件。它使用 Hadoop/HDFS API 在每个操作期间读取它。因此,最佳分区数量取决于 HDFS 块大小(与 Parquet 块大小不同!)。
Spark 1.5 DataFrame对parquet文件进行分区如下:
- 每个 HDFS 块 1 个分区
- 如果 HDFS 块大小小于 Spark parquet 块大小中配置的分区,将为多个 HDFS 块创建分区,例如分区的总大小不小于 parquet 块大小
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)