详细内容或原文请订阅后点击阅览
面向 Pandas 用户的 PySpark
常见的 Pandas 操作及其在 PySpark 中的等效操作面向 Pandas 用户的 PySpark 帖子首先出现在 Towards Data Science 上。
来源:走向数据科学在处理非常大的数据集时是一个真正的问题。我所说的“非常大”是指超过单台机器 RAM 容量的数据。
Pandas 用户面临的一些关键摩擦点包括:
内存中约束
Pandas 要求其处理的整个数据集都位于机器的随机存取存储器 (RAM) 中。除非首次加载,否则它无法轻松处理存储在硬盘驱动器上的数据,如果该数据对于您的内存来说太大,则会遇到问题。
例如,如果您尝试将 100GB CSV 文件加载到具有 16GB RAM 的标准笔记本电脑上的 Pandas 中,代码将立即崩溃。
而且,这不仅仅是 1:1 的比例。由于数据类型和对象开销的原因,Pandas 通常需要文件磁盘大小所需 RAM 的数倍。使用 16GB RAM,您的文件大小限制可能低至 3-4GB。
单线程执行
Pandas 的设计是为了方便和分析,而不是原始性能规模。默认情况下,Pandas 在单个 CPU 核心上执行操作。即使用户在具有 64 个核心的强大服务器上运行代码,Pandas 也将大部分只利用一个 CPU 核心,而让其他核心闲置。
急切执行与惰性求值
Pandas 使用 Eager Execution,这意味着它会在代码运行后立即执行计算。大数据工具(如 Apache Spark)使用惰性求值。后者通常比急切执行性能更高,因为当执行某些任务需要一系列步骤时,惰性评估可以查看所有步骤和所需的最终结果并进行适当优化。热切的执行力无法做到这一点。不管怎样,它都会盲目地依次执行每一步。
垂直缩放限制
要使 Pandas 处理更大的数据集,您必须依赖垂直扩展(购买具有更多 RAM 和更快 CPU 的更昂贵的计算机)。但这只能带你到目前为止。例如,Pandas 本身没有与集群“对话”的能力。它无法将数据帧分布在多台机器上。
那么该怎么办?
1/Dask 或 Ray
