Apache Spark 在哪里对输出进行压缩?

Where Apache Spark does the compression on output?

我们有一个 运行 独立集群模式下的 Spark 作业,它从 HDFS 读取数据并使用我们的自定义压缩器组件进行压缩,然后将 .zip 文件写入 Azure blob 存储。我们的 Spark 和 HDFS 托管在同一个数据中心(本地)。

例如,Spark 作业正在从本地 HDFS 读取 8 GB 文件并在 Azure blob 存储上创建 3 GB .zip,在这种情况下,Spark 是否将 8 GB 文件复制到 Azure blob 存储并且然后将其压缩为 3 GB .zip 文件,或者压缩是否发生在 executor/worker 节点并且只有压缩数据 (3 GB) 将被发送到 Azure blob 存储?我想了解在我的案例中私有本地存储与 Azure 存储之间发生的数据传输量,是 3 GB 还是 8 GB?

下面是代码片段,

sparkSession
      .read
      .schema(getInputSchema)
      .option("escape", "\"")
      .option("quote", "\"")
      .csv(hdfsPath)
      .write
      .repartition(1)
      .option("escape", "\"")
      .option("quote", "\"")
      .option("header", "true")
      .option("compression", "com.explore.compress.CustomZipCodec")
      .partitionBy("colum1")
      .csv(azureBlobPath)

补充一下,我们正在使用 apache-spark-2.3.x

压缩是程序化的,将通过 Executor 发生在 Worker 上。因此在 prem 和 3gb 转移到 azure。