首页 > 解决方案 > 如何在 Google Dataproc 工作节点上缓存数据

问题描述

我想在工作节点上本地缓存一些数据(ndarray),以与从 Spark 流中传入的 RDD 分发的 ndarray 进行一些比较。最好的方法是什么?

因为我想将存储在我的文件中的 ndarray 与从 Spark 流传递的每个单个 ndarray 进行比较。似乎我无法将这些数据加载到 RDD 中,因为我无法通过另一个 RDD 的 map 函数中的另一个 RDD。我尝试将它们加载到主节点上的列表并将它们广播到工作节点。但是当我尝试通过它们并与传入数据进行比较时,我得到一个错误,即广播变量不可迭代。

标签: apache-sparkpysparkgoogle-cloud-platformspark-streaminggoogle-cloud-dataproc

解决方案


这里的问题是您需要使用 value() 方法来读取广播变量的实际值。按照@user9613318 评论中的示例:

bd_array = sc.broadcast(np.arange(100))

这将为该范围创建一个 numpy 数组并将其广播给所有工作人员。如果您尝试仅将变量与“bd_array”一起使用,您将获得一个广播变量类,该类具有其他方法,例如persist、destroy 等。这是不可迭代的。如果您使用 'bd_array.value' 阅读它,您将获得可以迭代的广播 numpy 数组(一些文档在这里


推荐阅读