如何估算Spark DataFrame中每列的大小(以字节为单位)?

时间:2019-02-25 16:28:55

标签: apache-spark pyspark

我有一个非常大的Spark DataFrame,其中包含许多列,我想就是否将它们保留在我的管道中做出明智的判断,部分取决于它们的大小。 “多大”是指缓存此DataFrame时RAM中字节的大小,我希望这是处理该数据的计算成本的不错估计。有些列是简单类型(例如,双精度数,整数),而另一些列是复杂类型(例如,数组和可变长度的映射)。

我尝试过的一种方法是在没有问题的情况下缓存DataFrame,然后在有问题的列中进行缓存,在Spark UI中查看“存储”选项卡,然后进行区别。但这对于具有许多列的DataFrame是一个烦人且缓慢的练习。

我通常使用PySpark,因此最好使用PySpark答案,但Scala也可以。

1 个答案:

答案 0 :(得分:1)

我找到了一个基于以下相关答案的解决方案:https://stackoverflow.com/a/49529028

假设我正在使用一个名为df的数据框和一个名为SparkSession的{​​{1}}对象:

spark

一些证实这种方法可得出明智的结果:

  1. 报告的列大小总计为100%。
  2. 简单类型的列(如整数或双精度)每行占用预期的4个字节或8个字节。