S3上的Parquet文件格式:实际的Parquet文件是什么?

时间:2018-05-22 15:26:32

标签: apache-spark amazon-s3 parquet

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时,我实际上看到一个名为&#34; mydata.parquet &#34;的目录,以及< strong>文件名为&#34; mydata.parquet_ $ folder $ &#34; !!!如果我进入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
  4. 谢谢!

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

根据api保存parqueat文件,它保存在您提供的文件夹中。成功完成了这个过程的结果。

如果直接写入s3,S3会创建那些$文件夹。它会将临时文件夹和副本写入s3中的最终目标。原因是没有重命名的概念。

请查看s3-distcp以及DirectCommiter的性能问题。

答案 2 :(得分:1)

  1. s3n / amazon的emrfs使用$ folder $标记来表示“空目录”。忽略。
  2. 正如其他人所说,_SUCCESS文件是一个0字节的文件。忽略
  3. 目录中的所有其他.parquet文件都是输出;您最终得到的数字取决于输入上执行的任务数量
  4. 当spark使用目录(树)作为数据源时,所有以_或_开头的文件。被忽略了; s3n也将删除那些$ folder $的东西。因此,如果您使用新查询的路径,它将只接收该镶木地板文件。