【发布时间】:2020-07-22 18:30:03
【问题描述】:
Spark 有broadcast 变量,它们是只读的,accumulator 变量,可以由节点更新,但不能读取。有没有办法 - 或解决方法 - 定义一个既可更新又可读取的变量?
对这种读\写全局变量的一个要求是实现缓存。当文件作为 rdd 加载和处理时,会执行计算。这些计算的结果——发生在多个并行运行的节点中——需要放入一个映射中,该映射具有正在处理的实体的一些属性作为关键。随着 rdd 中的后续实体被处理,缓存被查询。
Scala 确实有 ScalaCache,它是缓存实现的外观,例如 Google Guava。但是如何在 Spark 应用程序中包含和访问这样的缓存呢?
缓存可以定义为驱动程序应用程序中创建SparkContext 的变量。但是接下来会有两个问题:
- 由于网络开销,性能可能会很差 在节点和驱动程序应用程序之间。
- 据我了解,每个 rdd 都会传递一个变量的副本 (在这种情况下为缓存)当变量第一次被 函数传递给 rdd。每个 rdd 都有自己的副本,不能访问共享的全局变量。
实现和存储这种缓存的最佳方式是什么?
谢谢
【问题讨论】:
-
如何在 Spark 中定义全局读写变量,例如用于定义缓存,如我的示例所示。
-
感谢 Tzach - 将为该问题添加新评论
标签: apache-spark