如何访问 Spark Streaming 应用程序中的缓存数据?

How to access cached data in Spark Streaming application?

我有一个 Kafka 代理,其中包含来自我的 IoT 应用程序的 JSON 数据。我从 Spark Streaming 应用程序连接到此服务器以进行一些处理。

我想在内存 (RAM) 中保存我的 json 数据的一些特定字段,我相信我可以使用 cache()persist() 运算符来实现。

下次当我在 Spark Streaming 应用程序中收到新的 JSON 数据时,我会检查内存 (RAM) 是否有我可以检索的公共字段。如果是,我会做一些简单的计算,最后更新我保存在内存 (RAM) 中的字段值。

因此,我想知道我之前描述的是否可行。如果是,我是否必须使用 cache() 或 persist() ?以及如何从内存中检索我的字段?

Spark 不是那样工作的。请以分布式方式考虑。

对于保存在RAM中的第一部分。您可以使用 cache()persist() 任何人,因为默认情况下他们将数据保存在工作人员的内存中。

您可以从 Apache Spark 代码 验证这一点。

 /** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
  def persist(): this.type = persist(StorageLevel.MEMORY_ONLY)

  /** Persist this RDD with the default storage level (`MEMORY_ONLY`). */
  def cache(): this.type = persist()

据我了解您的用例,您需要 UpdateStateByKey 操作来实现您的第二个用例!

有关窗口的更多信息,请参阅 here

cache / persist 可以使用内存或磁盘存储 Spark 应用程序中的数据(不一定仅适用于 Spark Streaming 应用程序——这是 caching in Spark).

但是...在 Spark Streaming 中,您得到了对此类用例的特殊支持,这些用例被称为 有状态计算。请参阅 Spark Streaming Programming Guide 以探索可能性。

我认为对于您的用例,mapWithState 运算符正是您所追求的。