首先是虚构的用例。我们假设我有一组元组(user_id, time_stamp, login_ip)
。我希望以5秒的粒度维护每个用户的最后一次登录IP。
使用Spark流,我可以使用updateStateByKey
方法更新此地图。问题是,随着数据流不断涌现,每个时间间隔的RDD变得越来越大,因为可以看到更多的user_ids
。在一段时间之后,地图将变得如此之大以至于维持它需要更长的时间,因此无法实现结果的实时传递。
请注意,这只是我提出来展示问题的一个简单示例。真正的问题可能更复杂,真正需要实时交付。
如何解决这个问题的任何想法(在Spark以及其他解决方案都会很好)?
答案 0 :(得分:2)
您还没有完全更新Map
。您提供的功能只是更新与一个键关联的状态,而Spark正在完成剩下的工作。特别是它为你维护一个类似地图的RDD
关键状态对 - 实际上,它们是一系列DStream
。因此,状态的存储和更新就像其他一切一样分布。如果更新速度不够快,您可以通过添加更多工作人员来扩展。