具有 Parquet 和分区的 Spark DataFrames
Spark DataFrames with Parquet and Partitioning
我找不到关于这个主题的太多信息,但可以说我们使用数据框读取一个 10 块的镶木地板文件,spark 自然会创建 10 个分区。但是当数据帧读入文件来处理它时,它不会处理大数据与分区的比率,因为如果它处理未压缩的文件,块大小会更大,这意味着分区也会更大。
让我澄清一下,镶木地板压缩(这些数字并不完全准确)。
1GB Par = 5 Blocks = 5 Partitions 可以解压缩到 5GB 使其成为 25 blocks/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 块大小
我看到了另一个答案,但我想我可以对此进行更多澄清。如果您正在从 posix 文件系统读取 Parquet,那么您可以通过在 Spark 中增加工作人员来增加分区读取的数量。
但是为了控制进入 worker 的数据的平衡,可以使用 Parquet 文件的分层数据结构,稍后在 worker 中您可以指向 Parquet 文件的不同分区或部分。这将使您能够根据数据集的域控制应向每个工作人员发送多少数据(如果通过平衡工作人员中的数据,您的意思是每个工作人员的等量数据效率不高)。
我找不到关于这个主题的太多信息,但可以说我们使用数据框读取一个 10 块的镶木地板文件,spark 自然会创建 10 个分区。但是当数据帧读入文件来处理它时,它不会处理大数据与分区的比率,因为如果它处理未压缩的文件,块大小会更大,这意味着分区也会更大。
让我澄清一下,镶木地板压缩(这些数字并不完全准确)。 1GB Par = 5 Blocks = 5 Partitions 可以解压缩到 5GB 使其成为 25 blocks/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 块大小
我看到了另一个答案,但我想我可以对此进行更多澄清。如果您正在从 posix 文件系统读取 Parquet,那么您可以通过在 Spark 中增加工作人员来增加分区读取的数量。
但是为了控制进入 worker 的数据的平衡,可以使用 Parquet 文件的分层数据结构,稍后在 worker 中您可以指向 Parquet 文件的不同分区或部分。这将使您能够根据数据集的域控制应向每个工作人员发送多少数据(如果通过平衡工作人员中的数据,您的意思是每个工作人员的等量数据效率不高)。