2016-10-05 26 views
-1

我有一套我广播的大变量。这些变量是从集群数据库加载的。是否可以通过工作节点从数据库分配负载,然后让每个节点都将其特定变量广播到所有节点以供后续的映射操作使用?Spark worker节点广播变量可能吗?

谢谢!

回答

0

好的,所以答案似乎是否定的。

调用sc.broadcast(someRDD)会导致错误。你必须首先收集()回驱动程序。

0

广播变量通常传递给工作人员,但我可以告诉你我在python中做了类似的情况。

如果您知道总行数,您可以尝试创建该长度的RDD,然后对其执行映射操作(将分配给工作人员)。在地图上,工作人员正在运行一个函数来获取一些数据(不知道如何让他们获得不同的数据)。

每个工作人员都会通过拨打电话来检索所需的数据。然后,您可以执行collectAsMap()来获取字典并将其广播给所有工作人员。

但请记住,您需要在每位工作人员上进行客户端请求的所有软件依赖性。您还需要牢记套接字使用情况。我只是做了类似的查询API,并没有看到套接字的增加,尽管我正在定期发送HTTP请求。不确定....

+0

对于来自数据库的数据创建分区函数非常简单,以确保每个工作人员只获取唯一的子集。有一个驱动程序进程单线程从数据库中提取所有数据只是为了将数据广播到集群上似乎很愚蠢。为什么不让集群完成这项工作? – ThatDataGuy

相关问题