【问题标题】:Spark DataFrames with Parquet and PartitioningSpark DataFrames with Parquet and Partitioning
【发布时间】:2015-12-11 20:47:09
【问题描述】:

我无法找到有关此主题的太多信息,但假设我们使用数据框读取 10 块的镶木地板文件,火花自然会创建 10 个分区。但是当数据帧读入文件来处理它时,它不会处理大数据与分区的比率吗,因为如果它正在处理未压​​缩的文件,块大小会大得多,这意味着分区也会更大。

所以让我澄清一下,实木复合地板压缩(这些数字并不完全准确)。 1GB Par = 5 Blocks = 5 个分区,可以解压缩到 5GB,使其成为 25 个块/25 个分区。但是除非你对 1GB 的 par 文件重新分区,否则你会被困在只有 5 个分区的情况下,最好是 25 个分区?还是我的逻辑错了。

重新分区以提高速度是否有意义?还是我想错了。任何人都可以对此有所了解吗?

假设:

  • 1 个块 = 1 个 Spark 分区
  • 1 个核心在 1 个分区上运行

【问题讨论】:

  • “正在处理更多信息”与什么?
  • 我的意思是我们读取了一个包含 10 个块的 parquet 文件,但是当它未压缩时,您仍在 Spark 中使用 10 个分区。由于未压缩的文件自然较大,您是否应该重新分区?
  • 添加了额外的说明

标签: apache-spark apache-spark-sql parquet


【解决方案1】:

Spark DataFrame 不会在内存中加载 parquet 文件。它使用 Hadoop/HDFS API 在每次操作期间读取它。因此最佳分区数取决于 HDFS 块大小(不同于 Parquet 块大小!)。

Spark 1.5 DataFrame 分区 parquet 文件如下:

  • 每个 HDFS 块 1 个分区
  • 如果 HDFS 块大小小于 Spark parquet 块大小中配置的分区,则会为多个 HDFS 块创建分区,例如分区的总大小不小于 parquet 块大小

【讨论】:

    【解决方案2】:

    我看到了另一个答案,但我想我可以对此进行更多澄清。如果您正在从 posix 文件系统读取 Parquet,那么您可以通过在 Spark 中拥有更多的工作人员来增加分区读数的数量。

    但是为了控制进入worker的数据平衡,可以使用Parquet文件的分层数据结构,稍后在worker中你可以指向Parquet文件的不同分区或部分。这将使您能够根据数据集的域控制每个工作人员应该有多少数据(如果通过平衡工作人员中的数据,您的意思是每个工作人员处理相同批次的数据效率不高)。

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 2019-09-25
      • 2015-09-01
      • 2017-11-02
      相关资源
      最近更新 更多