检查大小广播变量 PySpark

Posted

技术标签:

【中文标题】检查大小广播变量 PySpark【英文标题】:Check size broadcast variable PySpark 【发布时间】:2016-02-12 15:27:48 【问题描述】:

我无法找到我的广播变量的大小。由于推动了集群的内存限制,这与我的项目有关。集群在 YARN 上运行。在应用程序管理器中,我可以看到各个执行程序和驱动程序的内存使用情况,但我认为这些只是持久化的 RDDS。

【问题讨论】:

广播数据只是一个普通的 Python 对象。它不占用任何特殊空间AFAIK。您应该能够简单地估计它的本地大小(sys.getsizeof 对于本地对象应该足够了)大小并将其乘以执行器的数量。 【参考方案1】:

Spark 使用 pickle 序列化/反序列化广播变量。您可能想尝试的一件事是检查泡菜转储的大小,例如:

>>> import cPickle as pickle
>>> data = list(range(int(10*1e6)))  # or whatever your broadcast variable is
>>> len(pickle.dumps(data)) 
98888896  # the measurement of the size of your broadcast variable, in bytes

关于影响集群内存限制的广播变量,previous question of mine 提供了一些来自 zero323 的有用提示。

【讨论】:

我以为 pyspark 会序列化 java 中的东西?你确定这正是 pyspark 序列化东西的方式@captaincapsaicin github.com/apache/spark/blob/master/python/pyspark/… 向我表明 PySpark 使用 pickle 周围的包装器进行序列化。

以上是关于检查大小广播变量 PySpark的主要内容,如果未能解决你的问题,请参考以下文章

sparksql缓存表能做广播变量吗

Spark基础学习笔记21:RDD检查点与共享变量

Linux脚本练习之script018-检查磁盘分区空间和 inode 使用率,如果超过 80%,则发广播警告空间将满。

如何检查 jinja2/django 模板中任何变量的大小写?

spark学习笔记——sparkcore核心编程-RDD序列化/依赖关系/持久化/分区器/累加器/广播变量

MFC 中的广播组