我需要通过PySpark从S3读取数据(源自具有5列的RedShift表,表的总大小为500gb-1tb左右),以进行日常批处理作业。
是否存在以下最佳做法:
任何可以向我指出正确方向的资源/链接也都可以使用。
谢谢!
答案 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倍。