apache-spark - 如何在 Google Dataproc 工作节点上缓存数据
问题描述
我想在工作节点上本地缓存一些数据(ndarray),以与从 Spark 流中传入的 RDD 分发的 ndarray 进行一些比较。最好的方法是什么?
因为我想将存储在我的文件中的 ndarray 与从 Spark 流传递的每个单个 ndarray 进行比较。似乎我无法将这些数据加载到 RDD 中,因为我无法通过另一个 RDD 的 map 函数中的另一个 RDD。我尝试将它们加载到主节点上的列表并将它们广播到工作节点。但是当我尝试通过它们并与传入数据进行比较时,我得到一个错误,即广播变量不可迭代。
解决方案
这里的问题是您需要使用 value() 方法来读取广播变量的实际值。按照@user9613318 评论中的示例:
bd_array = sc.broadcast(np.arange(100))
这将为该范围创建一个 numpy 数组并将其广播给所有工作人员。如果您尝试仅将变量与“bd_array”一起使用,您将获得一个广播变量类,该类具有其他方法,例如persist、destroy 等。这是不可迭代的。如果您使用 'bd_array.value' 阅读它,您将获得可以迭代的广播 numpy 数组(一些文档在这里)
推荐阅读
- c# - 将 TextBox.Text 绑定到 DataSet.DataSetName
- c - 如何通知服务器客户端正在关闭连接
- javascript - 数组推送改变所有元素
- java - Android:允许通过扩展 EditText 在画布上输入文本
- sql-server - 如何对数据库项目进行可跟踪的架构更改?
- python - 如何使用 Django 设置 OrientDB PyOrient OGM?
- python - 根据其他两个列和表在 pandas 中创建列
- android - CSS 未在移动设备上 Facebook 的嵌入式应用内浏览器中加载
- python - SqlAlchemy - 如何通过关联代理更新对外部表的引用?
- php - REGEX - 将积极的前瞻与条件相结合?