S3 上的 Parquet 文件格式:哪个是实际的 Parquet 文件?
Parquet file format on S3: which is the actual Parquet file?
这里是 Scala 2.12 和 Spark 2.2.1。我用下面的代码把aDataFrame
的内容写到S3:
myDF.write.mode(SaveMode.Overwrite)
.parquet("s3n://com.example.mybucket/mydata.parquet")
当我转到 S3 上的 com.example.mybucket
时,我实际上看到一个名为“mydata.parquet”的 目录,以及名为“mydata.parquet_$folder$”的 file!!!如果我进入 mydata.parquet
目录,我会看到它下面有两个文件:
_SUCCESS
;和
part-<big-UUID>.snappy.parquet
而我只是希望看到一个名为 mydata.parquet
的文件存在于存储桶的根目录中。
这里有什么问题吗(如果有,是什么?!?)或者这是 Parquet 文件格式所期望的?如果是预期的,这是我应该读取的 actual Parquet 文件:
mydata.parquet
目录?;或
mydata.parquet_$folder$
文件?;或
mydata.parquet/part-<big-UUID>.snappy.parquet
?
谢谢!
mydata.parquet/part-<big-UUID>.snappy.parquet
是实际的parquet数据文件。但是,像 Spark 这样的工具通常会将数据集分解为多个 part
文件,并期望指向包含多个文件的目录。 _SUCCESS
文件是一个简单的标志,表示写入操作已完成。
根据api保存parqueat文件,它保存在您提供的文件夹内。成功表示过程顺利完成。
如果您直接提交到 s3,S3 会创建这些 $ 文件夹。发生的事情是它写入临时文件夹并复制到 s3 内的最终目的地。原因是没有重命名的概念。
查看 s3-distcp 和 DirectCommiter 的性能问题。
- s3n/amazon 的 emrfs 使用 $folder$ 标记来指示 "empty directory"。忽略。
- 正如其他人所说,_SUCCESS 文件是一个 0 字节文件。忽略
- 目录中的所有其他 .parquet 文件都是输出;你最终得到的数字取决于在输入上执行的任务数量
当spark使用目录(树)作为数据源时,所有以_或.开头的文件。被忽略; s3n 也会删除那些 $folder$ 的东西。因此,如果您将路径用于新查询,它只会选取该镶木地板文件。
这里是 Scala 2.12 和 Spark 2.2.1。我用下面的代码把aDataFrame
的内容写到S3:
myDF.write.mode(SaveMode.Overwrite)
.parquet("s3n://com.example.mybucket/mydata.parquet")
当我转到 S3 上的 com.example.mybucket
时,我实际上看到一个名为“mydata.parquet”的 目录,以及名为“mydata.parquet_$folder$”的 file!!!如果我进入 mydata.parquet
目录,我会看到它下面有两个文件:
_SUCCESS
;和part-<big-UUID>.snappy.parquet
而我只是希望看到一个名为 mydata.parquet
的文件存在于存储桶的根目录中。
这里有什么问题吗(如果有,是什么?!?)或者这是 Parquet 文件格式所期望的?如果是预期的,这是我应该读取的 actual Parquet 文件:
mydata.parquet
目录?;或mydata.parquet_$folder$
文件?;或mydata.parquet/part-<big-UUID>.snappy.parquet
?
谢谢!
mydata.parquet/part-<big-UUID>.snappy.parquet
是实际的parquet数据文件。但是,像 Spark 这样的工具通常会将数据集分解为多个 part
文件,并期望指向包含多个文件的目录。 _SUCCESS
文件是一个简单的标志,表示写入操作已完成。
根据api保存parqueat文件,它保存在您提供的文件夹内。成功表示过程顺利完成。
如果您直接提交到 s3,S3 会创建这些 $ 文件夹。发生的事情是它写入临时文件夹并复制到 s3 内的最终目的地。原因是没有重命名的概念。
查看 s3-distcp 和 DirectCommiter 的性能问题。
- s3n/amazon 的 emrfs 使用 $folder$ 标记来指示 "empty directory"。忽略。
- 正如其他人所说,_SUCCESS 文件是一个 0 字节文件。忽略
- 目录中的所有其他 .parquet 文件都是输出;你最终得到的数字取决于在输入上执行的任务数量
当spark使用目录(树)作为数据源时,所有以_或.开头的文件。被忽略; s3n 也会删除那些 $folder$ 的东西。因此,如果您将路径用于新查询,它只会选取该镶木地板文件。