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

时间:2016-11-18 16:41:28

标签: apache-spark spark-streaming

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

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

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

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

2 个答案:

答案 0 :(得分:4)

可能cache / persist使用内存或磁盘作为Spark应用程序中的数据(不一定只用于Spark Streaming应用程序 - 它更常用) caching in Spark)。

但是......在Spark Streaming中,你得到了对这种称为有状态计算的用例的特别支持。请参阅Spark Streaming Programming Guide以了解可能的内容。

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

答案 1 :(得分:0)

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