我有一个非常大的Spark DataFrame,其中包含许多列,我想就是否将它们保留在我的管道中做出明智的判断,部分取决于它们的大小。 “多大”是指缓存此DataFrame时RAM中字节的大小,我希望这是处理该数据的计算成本的不错估计。有些列是简单类型(例如,双精度数,整数),而另一些列是复杂类型(例如,数组和可变长度的映射)。
我尝试过的一种方法是在没有问题的情况下缓存DataFrame,然后在有问题的列中进行缓存,在Spark UI中查看“存储”选项卡,然后进行区别。但这对于具有许多列的DataFrame是一个烦人且缓慢的练习。
我通常使用PySpark,因此最好使用PySpark答案,但Scala也可以。
答案 0 :(得分:1)
我找到了一个基于以下相关答案的解决方案:https://stackoverflow.com/a/49529028。
假设我正在使用一个名为df
的数据框和一个名为SparkSession
的{{1}}对象:
spark
一些证实这种方法可得出明智的结果: