你的大数据项目应该使用哪种数据格式?

选择适合你大数据项目的数据格式

Pickle, Parquet, CSV, Feather, HDF5, ORC, JSON:应该使用哪一个,并且为什么?

Image by Maarten van den Heuvel — Unsplash

在数据科学项目中选择正确的数据格式非常重要,它会影响数据的读写速度、内存消耗和互操作性等方面。本文探讨了 Python 中七种流行的序列化/反序列化格式,重点关注它们的速度和内存使用情况。

通过分析,我们还将了解如何使用 Python 中的性能分析工具(使用内置模块cProfile)以及如何获取文件系统中特定文件的内存使用统计信息(使用 Python 模块os)。

当然,每个项目都有其自身的特点,不仅仅局限于速度和内存使用。但我们将得出一些趋势,希望能帮助我们选择适合特定项目的格式。

理解序列化和反序列化

序列化是将对象(例如 Python 中的 pandas DataFrame)保存为可保存到文件中以供以后检索的格式的过程。反序列化是其相反的过程。

Dataframe 是一个 Python 对象,不能直接持久化。需要将其转换为文件才能在以后的阶段加载该对象。

当你保存一个 dataframe 时,你将数据“序列化”了。当你重新加载它时,你将其“反序列化”或者将其转换回一种可读语言(例如 Python)的格式。

某些格式被广泛使用,因为它们是易读的,例如 JSON 或 CSV。这两种格式也因为它们是与语言无关的而被使用。就像最初由谷歌开发的协议缓冲区一样。JSON 和协议缓冲区也常用于 API,并且可以在使用不同编程语言编写的不同服务之间传递数据。

另一方面,一些格式,如 Python 的 pickle,是特定于某种语言的,不适合在不同编程语言之间传输数据。例如,对于机器学习用例,如果一个存储库训练模型并将其序列化为 pickle 文件,该文件只能从 Python 中读取。因此,如果 API…