我有一个ETL作业,正在加载许多CSV文件。其中一些CSV文件包含相同类型的数据,例如60个文件包含一个初始数据帧的数据,另外30个文件包含另一个初始数据帧的数据,依此类推。然后,使用Dataframe API将这些数据帧合并并聚合,最终将最终的数据帧保存到一个Parquet文件中。
对我来说,先将所有CSV文件组转换为单个Parquet文件,然后再读取这些Parquet文件并进行进一步处理,是否对我有好处? 它会使事情变得更快(考虑到此转换步骤将在我的工作中每次运行)吗?因为我的数据帧现在将由Parquet文件而不是CSV文件支持,所以Spark占用更少的内存会有所帮助吗?
答案 0 :(得分:1)
我认为只有在您的数据不可变的情况下这才是有益的。如果CSV文件不断变化,那么您每次进行处理前都只是进行读-转换-写操作。
spark读取CSV文件后,数据便已加载到内存中。
如果我没记错的话,实木复合地板文件提供的效率是,如果立即过滤数据集,则只能从磁盘读取必需的数据。我相信它基本上会将过滤器推向磁盘读取代码,并且该过程能够跳过不感兴趣的记录。
以您为例,无论如何,您都必须阅读整个CSV来写入拼花地板,因此您只会在写和重读步骤上浪费资源。