我想在工作节点上本地缓存一些数据(ndarrays),以便与来自Spark流的传入RDD分发的ndarray进行一些比较。最好的方法是什么?
因为我想比较存储在我的文件中的ndarray与从Spark流传入的每个ndarray。我似乎无法将这些数据加载到RDD中,因为我无法通过另一个RDD的map函数中的另一个RDD。我尝试将它们加载到主节点上的列表中,并将它们广播到工作节点。但是当我尝试通过它们并与传入的数据进行比较时,我得到一个广播变量不可迭代的错误。
答案 0 :(得分:0)
这里的问题是你需要使用value()方法来读取广播变量的实际值。按照@ user9613318的评论中的示例:
bd_array = sc.broadcast(np.arange(100))
这将为该范围创建一个numpy数组并将其广播给所有工作人员。如果您尝试仅使用' bd_array'你会得到一个广播变量类,它有其他方法,如persist,destroy等。这是不可迭代的。如果您使用' bd_array.value'你将获得可以迭代的广播numpy数组(some docs here)