【发布时间】:2017-09-01 09:51:32
【问题描述】:
据我所知,广播对于获取变量的本地副本很有用。并且变量的大小必须适合worker的内存。
在我的情况下,但是,我想获取不适合工人记忆的 大型变量 的本地副本。
如何在 Spark 中不使用广播功能广播这个大变量?
【问题讨论】:
-
那是什么变量?您将对变量执行什么样的操作?
标签: hadoop apache-spark broadcast
据我所知,广播对于获取变量的本地副本很有用。并且变量的大小必须适合worker的内存。
在我的情况下,但是,我想获取不适合工人记忆的 大型变量 的本地副本。
如何在 Spark 中不使用广播功能广播这个大变量?
【问题讨论】:
标签: hadoop apache-spark broadcast
问题:
在我的情况下,但是,我想获取大变量的本地副本 不适合工人的记忆。
如何不使用广播功能广播这个大变量 在 Spark 中?
AFAIK 这是不可能的(这不符合工人的记忆......)
通过sc.broadcast(..) 或functions.broadcast(hint)
请注意内存限制为 2GB(TorrentBroadcast ) 请参阅SPARK-6235 - Address various 2G limits
您可以将该数据(您想要广播的)摄取到 hadoop/hbase(或任何无 sql)中,或者可能是 memcached,然后您可以查找。
【讨论】:
大变量不适合工人的记忆
就像上面提到的 Ram,如果它不适合工人的记忆,你就没有办法使用它,即使你可以广播它。
如果您尝试使用大型数据集进行查找,您可以在每个工作节点上建立一个到数据库的连接池。如果您有模型,您可以将模型保存到每个工作节点并在foreachPartition 期间读取文件。根据您的用例,可能还有其他解决方案。
【讨论】: