【问题标题】:Parquet file format on S3: which is the actual Parquet file?S3 上的 Parquet 文件格式:哪个是实际的 Parquet 文件?
【发布时间】:2018-05-22 15:26:32
【问题描述】:

Scala 2.12 和 Spark 2.2.1 在这里。我使用以下代码将DataFrame的内容写入S3:

myDF.write.mode(SaveMode.Overwrite)
  .parquet("s3n://com.example.mybucket/mydata.parquet")

当我在 S3 上转到 com.example.mybucket 时,我实际上看到了一个名为“mydata.parquet”的目录,以及一个名为“mydata.parquet_$folder$”!!!如果我进入mydata.parquet 目录,我会在它下面看到两个文件:

  • _SUCCESS;和
  • part-<big-UUID>.snappy.parquet

而我只是希望看到一个名为 mydata.parquet 的文件存在于存储桶的根目录中。

这里有什么问题吗(如果有,是什么?!?)还是 Parquet 文件格式会出现这种情况?如果符合预期,那是我应该读取的 实际 Parquet 文件:

  1. mydata.parquet目录?;或
  2. mydata.parquet_$folder$ 文件?;或
  3. mydata.parquet/part-<big-UUID>.snappy.parquet?

谢谢!

【问题讨论】:

    标签: apache-spark amazon-s3 parquet


    【解决方案1】:

    mydata.parquet/part-<big-UUID>.snappy.parquet 是实际的 parquet 数据文件。然而,像 Spark 这样的工具通常会将数据集分解为多个 part 文件,并期望指向包含多个文件的目录。 _SUCCESS 文件是一个简单的标志,表明写操作已经完成。

    【讨论】:

      【解决方案2】:

      根据api来保存它保存在您提供的文件夹中的parqueat文件。 Sucess 表明该过程顺利完成。

      如果您直接将提交写入 s3,S3 会创建这些 $folder。发生的情况是它写入临时文件夹并复制到 s3 内的最终目的地。原因是没有重命名的概念。

      查看 s3-distcp 和 DirectCommiter 的性能问题。

      【讨论】:

      • 不是直接提交者:它无法处理失败...这就是为什么 spark 2.x 中缺少它
      【解决方案3】:
      1. $folder$ 标记被 s3n/amazon 的 emrfs 用来指示“空目录”。忽略。
      2. _SUCCESS 文件,正如其他人所指出的,是一个 0 字节文件。忽略
      3. 目录中的所有其他 .parquet 文件都是输出;您最终得到的数字取决于在输入上执行的任务数

      当 spark 使用目录(树)作为数据源时,所有以 _ 或 .被忽略; s3n 也会去掉那些 $folder$ 的东西。因此,如果您将路径用于新查询,它只会选择该 parquet 文件。

      【讨论】:

        猜你喜欢
        • 2022-11-24
        • 2020-07-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-07
        • 1970-01-01
        • 1970-01-01
        • 2020-11-28
        相关资源
        最近更新 更多