用于大数据和 RAM 使用的 PySpark

数据挖掘 数据框 pyspark 记忆
2022-03-08 00:58:04

我试图找出处理大数据 ETL 操作的最佳和最有效的方法。我的问题是这个。

假设我有一个大小约为 50 GB 的表。为了有效地将这个表中的数据从一个源传输到另一个源,特别是使用 PySpark,我是否需要超过 50 GB 的 RAM?

谢谢你的帮助。

1个回答

一切都取决于输入表的分区。

这是2种方法:

  • 因此,如果您只有一个分区,那么您将有一个任务/作业将使用集群中的单个核心,并且最终需要超过 50GB 的 RAM,否则您将运行 OOM。如果您已将数据读取为多分区表,那么 50GB 就足够了,因为每个分区都需要内存来处理任务/作业。
  • 最重要的是,您可以将批处理用于 ETL,这就是在生产中使用的方式,因为您不会分配 PB 的资源内存来仅处理/转换/建模 PB 的数据集/表。

这么短:

  • 对于 ETL 数据准备:读取数据是通过分区并行完成的,每个分区都应该适合执行程序内存(到目前为止,还没有看到 50Gb 或 PB 数据的分区),因此 ETL 很容易批量完成并利用电源分区,对任何大小的数据集或表执行任何转换。

  • 对于建模/ML/DS:当我们从建模/ML/DS 的角度来看,这一切都取决于所应用的模型,这就是为什么并非所有模型都可以扩展到 spark 并且大多数成功的 spark 模型是利用样本/子采样进行建模的集成或堆叠模型.

注意:如果您对分区大小的默认配置不满意,您可以通过 col/cols 重新分区 spark 数据帧,同样适用于处理/转换数据(使用 cols 或分区)。

一些资源: 显示 表的分区以及在 spark 中计算数据集大小的方法