首页 文章

Spark DataFrame如何处理大于内存的Pandas DataFrame

提问于
浏览
2

我现在正在学习Spark,它似乎是Pandas Dataframe的大数据解决方案,但我有这个问题让我不确定 .

目前我使用HDF5存储大于内存的Pandas数据帧 . HDF5是一个很棒的工具,它允许我对pandas数据帧进行分块 . 因此,当我需要对大型Pandas数据帧进行处理时,我将以块的形式进行处理 . 但是Pandas不支持分布式处理,而HDF5仅适用于单个PC环境 .

使用Spark数据框架可能是解决方案,但我对Spark的理解是数据框架必须能够适应内存,并且一旦作为Spark数据框加载,Spark就会将数据框分发给不同的工作人员来进行分布式处理 .

我的理解是否正确?如果是这种情况,那么Spark如何处理大于内存的数据帧?它是否支持像HDF5一样的分块?

1 回答

  • 5

    数据框必须能够适合内存,并且一旦作为Spark数据框加载,Spark就会将数据框分发给不同的工作人员来进行分布式处理 .

    仅当您尝试在驱动程序上加载数据然后并行化时才会出现这种情况 . 在典型情况下,您可以以可并行读取的格式存储数据 . 这意味着你的数据:

    必须可以在每个worker上访问

    • ,例如使用分布式文件系统

    • 文件格式必须支持拆分(最简单的例子是普通的旧csv)

    在这种情况下,每个工作者只读取其自己的数据集部分,而不需要将数据存储在驱动程序存储器中 . 与计算拆分相关的所有逻辑都由适用的Hadoop输入格式透明地处理 .

    关于HDF5文件,您有两种选择:

    • 在驱动程序的块中读取数据,从每个块构建Spark DataFrame,以及union结果 . 这样效率低但易于实施

    • 直接在 Worker 身上分发HDF5文件/文件并读取数据 . 这通常更难实现,需要智能数据分发策略

相关问题