【问题标题】:Is the size of a Spark partition after decompression or before decompression if the input data is compressed (and splittable)如果输入数据被压缩(且可拆分),则为解压后或解压前 Spark 分区的大小
【发布时间】:2023-02-26 03:48:14
【问题描述】:

我了解到数据帧加载阶段的 spark 分区大小由以下值决定:

  • 总输入数据大小和文件数
  • 文件格式属性(PARQUET 与 CSV、可拆分、...)
  • spark.sql.files.maxPartitionBytes
  • spark.default.parallelism
  • spark.sql.files.openCostInBytes

假设分区大小确定为 128MB,如果输入文件是压缩的、可拆分的并且大于 128MB,那么分区是否包含高达 128MB 的压缩数据,或者是解压后的数据?我以为是前者,但我想仔细检查一下。

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    如果输入数据是compressedsplittable,那么分区大小是根据compressed输入file size确定的,而不是uncompressed大小。

    换句话说,每个分区的大小是根据解压缩前的压缩数据大小来确定的。这意味着一个分区在解压缩后可能包含比其指定大小限制更多的数据,但 Spark 仍会将其视为单个分区。

    这是因为输入数据通常以压缩格式读取,并在 Spark 处理时即时解压缩。因此,分区大小限制是根据压缩后的数据大小来指定的,以确保数据可以在集群中高效分布。

    但是,值得注意的是,某些文件格式(例如 ORC 和 Parquet)使用的压缩技术可以进行高效的列式处理,并且不需要解压缩整个文件。在这些情况下,分区大小限制可能基于未压缩的列数据大小,而不是压缩文件大小。

    我在第一个答案中突出了一些关键词,希望这对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-23
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      相关资源
      最近更新 更多