我知道,广播对于获取变量的本地副本很有用。而且变量的大小必须适合工作人员的内存。然而,在我的例子中,我想得到大变量的本地副本,它不适合于worker的内存。不使用spark中的broadcast函数如何广播这个大变量?
rnmwe5a21#
不适合工人记忆的大变量就像上面提到的ram,如果它不适合工作人员的内存,就没有办法使用它,即使您可以广播它。如果您试图使用大型数据集进行查找,可以在每个工作节点上创建一个到数据库的连接池。如果您有一个模型,您可以将该模型保存到每个工作节点,并在创建过程中读取一个文件 foreachPartition . 根据您的用例,可能还有其他解决方案。
foreachPartition
xzlaal3s2#
问题:然而,在我的例子中,我想得到大变量的本地副本,它不适合于worker的内存。不使用spark中的broadcast函数如何广播这个大变量?恐怕这是不可能的(这将不适合工人的记忆…) sc.broadcast(..) 或者 functions.broadcast(hint) 请注意,内存限制为2gb(torrentbroadcast)。请参阅spark-6235-解决各种2g限制您可以将该数据(您想要广播的)摄取到hadoop/hbase(或任何no-sql)中,或者可以是memcached,然后您可以查找。看一下将spark数据加载到mongo/memcached中以供webservice使用
sc.broadcast(..)
functions.broadcast(hint)
2条答案
按热度按时间rnmwe5a21#
不适合工人记忆的大变量
就像上面提到的ram,如果它不适合工作人员的内存,就没有办法使用它,即使您可以广播它。
如果您试图使用大型数据集进行查找,可以在每个工作节点上创建一个到数据库的连接池。如果您有一个模型,您可以将该模型保存到每个工作节点,并在创建过程中读取一个文件
foreachPartition
. 根据您的用例,可能还有其他解决方案。xzlaal3s2#
问题:
然而,在我的例子中,我想得到大变量的本地副本,它不适合于worker的内存。
不使用spark中的broadcast函数如何广播这个大变量?
恐怕这是不可能的(这将不适合工人的记忆…)
sc.broadcast(..)
或者functions.broadcast(hint)
请注意,内存限制为2gb(torrentbroadcast)。请参阅spark-6235-解决各种2g限制您可以将该数据(您想要广播的)摄取到hadoop/hbase(或任何no-sql)中,或者可以是memcached,然后您可以查找。
看一下将spark数据加载到mongo/memcached中以供webservice使用