S3和Spark:文件大小和文件格式最佳实践

时间:2019-07-10 16:59:13

标签: apache-spark amazon-s3 pyspark

我需要通过PySpark从S3读取数据(源自具有5列的RedShift表,表的总大小为500gb-1tb左右),以进行日常批处理作业。

是否存在以下最佳做法:

  • 如何在S3中存储数据的首选文件格式? (格式是否重要?)
  • 最佳文件大小?

任何可以向我指出正确方向的资源/链接也都可以使用。

谢谢!

1 个答案:

答案 0 :(得分:2)

此博客文章提供了有关该主题的一些很好的信息:

https://mapr.com/blog/tips-and-best-practices-to-take-advantage-of-spark-2-x/

查看标题为:为您的用例使用最佳数据存储的部分

根据个人经验,我更喜欢在大多数情况下使用镶木地板,因为我通常先将数据写入一次,然后多次读取(以进行分析)。

就文件数量而言,我希望介于200到1,000之间。这允许各种大小的集群并行读取和写入,并允许我高效地读取数据,因为使用镶木地板,我可以仅放大我感兴趣的文件。如果文件太多,则有一个记住所有文件名和位置的大量开销,如果文件太少,将无法有效地并行进行读取和写入。

使用镶木地板时,我发现文件大小没有文件数量重要。

编辑:

在该博客文章中,有一个很好的部分描述了为什么我喜欢使用镶木地板:

  

Apache Parquet通过Spark提供最快的读取性能。 Parquet将数据按列排列,将相关值彼此紧靠,以优化查询性能,最小化I / O并促进压缩。 Parquet使用节省资源的技术来检测和编码相同或相似的数据。 Parquet还存储列元数据和统计信息,可以将其下推以过滤列(如下所述)。 Spark 2.x具有矢量化的Parquet阅读器,该阅读器可以按列批量进行解压缩和解码,从而使读取性能提高约10倍。