【问题标题】:How to access cached data in Spark Streaming application?如何访问 Spark Streaming 应用程序中的缓存数据?
【发布时间】:2016-11-18 16:41:28
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: apache-spark spark-streaming


    【解决方案1】:

    cache / persist 可以使用内存或磁盘存储 Spark 应用程序中的数据(不一定仅适用于 Spark Streaming 应用程序 - 它是 caching in Spark 的更普遍用法)。

    但是...在 Spark Streaming 中,您可以得到对这种称为有状态计算的用例的特殊支持。请参阅 Spark Streaming Programming Guide 以探索可能发生的事情。

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

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-02
        • 1970-01-01
        • 2016-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-17
        相关资源
        最近更新 更多