我有一张下面结构的表格。
trans_count
start_time, end_time, count
00:00:01 00:00:10 1000
00:00:11 00:00:20 800
Spark会侦听来自Kafka的事件并进行10秒的分组,并且必须插入到Phoenix hbase表中。
10秒后,我必须首先检查start_time,end_time组合是否在表中。如果它在那里,我们必须采用现有的计数并添加新的计数并重新插入它。
UPSERT INTO trans_count(start_time, end_time, count) SELECT start_time, end_time, count? FROM trans_count WHERE start_time = ? AND end_time = ?
如果上述语句中没有插入行,则只需插入数据。
在Apache Storm中,我能够在configure方法中创建一个Phoenix Connection对象,并且能够每10秒对UPSERT使用一次相同的连接。
在Spark中,我无法创建连接对象并为RDD中的每个对象使用相同的对象。 我的spark输出将是一个JavaDStream>其中start_time,end_time,count是Map中的所有键。
我最终为每次RDD迭代创建一个连接对象,我觉得这不是正确的方法。我已经读过凤凰城的连接很轻但是为每个RDD创建一个连接对象似乎不是正确的方法。
我读了一些关于相关内容的博客,但无法实现这一目标。请帮助。
注意:应用程序是用JAVA构建的。