Spark DataFrame如何处理Pandas大于内存的DataFrame
How does Spark DataFrame handles Pandas DataFrame that is larger than memory
我现在正在学习Spark,它似乎是Pandas Dataframe的大数据解决方案,但是我有这个问题让我不确定。
目前我正在使用 HDF5 存储 Pandas 比内存大的数据帧。 HDF5 是一个很棒的工具,它允许我在 pandas 数据帧上进行分块。因此,当我需要对大型 Pandas 数据帧进行处理时,我会分块进行。但是Pandas不支持分布式处理,HDF5只针对单PC环境
使用 Spark dataframe 可能是解决方案,但我对 Spark 的理解是 dataframe 必须能够适合内存,一旦作为 Spark dataframe 加载,Spark 会将 dataframe 分发给不同的 worker 进行分布式处理.
我的理解对吗?如果是这种情况,那么 Spark 如何处理大于内存的数据帧?它是否支持像 HDF5 这样的分块?
the dataframe must be able to fit in memory, and once loaded as a Spark dataframe, Spark will distribute the dataframe to the different workers to do the distributed processing.
仅当您尝试将数据加载到驱动程序上然后并行化时才适用。在典型情况下,您以可以并行读取的格式存储数据。这意味着您的数据:
- 每个工作人员都必须可以访问,例如使用分布式文件系统
- 文件格式必须支持拆分(最简单的示例是普通的旧 csv)
在这种情况下,每个工作人员只读取自己的数据集部分,无需将数据存储在驱动程序内存中。所有与计算拆分相关的逻辑都由适用的 Hadoop 输入格式透明地处理。
关于 HDF5 文件,您有两个选择:
- 在驱动程序上以块的形式读取数据,从每个块构建 Spark DataFrame,并合并结果。这是低效但易于实现
- 分发 HDF5 文件并直接在 worker 上读取数据。这一般来说更难实施,需要智能数据分发策略
我现在正在学习Spark,它似乎是Pandas Dataframe的大数据解决方案,但是我有这个问题让我不确定。
目前我正在使用 HDF5 存储 Pandas 比内存大的数据帧。 HDF5 是一个很棒的工具,它允许我在 pandas 数据帧上进行分块。因此,当我需要对大型 Pandas 数据帧进行处理时,我会分块进行。但是Pandas不支持分布式处理,HDF5只针对单PC环境
使用 Spark dataframe 可能是解决方案,但我对 Spark 的理解是 dataframe 必须能够适合内存,一旦作为 Spark dataframe 加载,Spark 会将 dataframe 分发给不同的 worker 进行分布式处理.
我的理解对吗?如果是这种情况,那么 Spark 如何处理大于内存的数据帧?它是否支持像 HDF5 这样的分块?
the dataframe must be able to fit in memory, and once loaded as a Spark dataframe, Spark will distribute the dataframe to the different workers to do the distributed processing.
仅当您尝试将数据加载到驱动程序上然后并行化时才适用。在典型情况下,您以可以并行读取的格式存储数据。这意味着您的数据:
- 每个工作人员都必须可以访问,例如使用分布式文件系统
- 文件格式必须支持拆分(最简单的示例是普通的旧 csv)
在这种情况下,每个工作人员只读取自己的数据集部分,无需将数据存储在驱动程序内存中。所有与计算拆分相关的逻辑都由适用的 Hadoop 输入格式透明地处理。
关于 HDF5 文件,您有两个选择:
- 在驱动程序上以块的形式读取数据,从每个块构建 Spark DataFrame,并合并结果。这是低效但易于实现
- 分发 HDF5 文件并直接在 worker 上读取数据。这一般来说更难实施,需要智能数据分发策略