如何为Java RDD的每个元素读取和保存数据库的通知限制

时间:2016-11-08 17:19:49

标签: apache-spark rdd spark-cassandra-connector

我是Apache Spark的新手。我正在编写一个程序,通过从Apache Cassandra数据库中获取数据来创建JavaRDD。然后我通过调用一些不属于我的驱动程序的辅助方法来处理RDD中的每个元素。

在基于某些条件的帮助方法中,我想发送电子邮件通知。但在此之前,我想获得已经发送给该用户的通知数量。如果它没有超过限制,那么我想发送通知并增加该用户的数据库中的通知号。

那么当我不在驱动程序中并且在我的帮助方法中没有sparkContext时,如何获取此数据并在数据库中更新此数据?

请建议。我正在使用Apache Spark 2.0.0和Spark Cassandra Java连接器

提前谢谢

1 个答案:

答案 0 :(得分:0)

仅在执行者身上不可能,因为他们不会彼此同步。但你可以尝试这个解决方案:

  1. 重写您的帮助方法,为每个要发送的用户的通知返回包含架构(user, notification)的数据框
  2. 对此数据框执行collect_list聚合(架构将更改为(user, [notif1, notif2, ...])
  3. 将已发送通知的数据加载到新数据框,例如(user, remaining_notifications_number)
  4. 加入(2)和(3)中的数据集,并为每个结果发送未超过限制的通知数。
  5. 希望有所帮助!