我现在正在学习Spark,它似乎是Pandas Dataframe的大数据解决方案,但我有这个问题让我不确定。
目前我使用HDF5存储大于内存的Pandas数据帧。 HDF5是一个很棒的工具,它允许我对pandas数据帧进行分块。因此,当我需要对大型Pandas数据帧进行处理时,我将以块的形式进行处理。但是Pandas不支持分布式处理,而HDF5仅适用于单个PC环境。
使用Spark数据框架可能是解决方案,但我对Spark的理解是数据框架必须能够适应内存,并且一旦作为Spark数据框加载,Spark就会将数据框分发给不同的工作人员来进行分布式处理。
我的理解是否正确?如果是这种情况,那么Spark如何处理大于内存的数据帧?它是否支持像HDF5一样的分块?
答案 0 :(得分:5)
数据框必须能够适合内存,一旦作为Spark数据帧加载,Spark就会将数据框分发给不同的工作人员来进行分布式处理。
只有当您尝试在驱动程序上加载数据然后并行化时,才会出现这种情况。在典型情况下,您可以以可并行读取的格式存储数据。这意味着您的数据:
在这种情况下,每个工作人员只读取其自己的数据集部分,而无需将数据存储在驱动程序内存中。与计算拆分相关的所有逻辑都由适用的Hadoop输入格式透明地处理。
关于HDF5文件,您有两种选择: