Apache spark 在Java中将JavaPairDStream转换为Tuple3

Apache spark 在Java中将JavaPairDStream转换为Tuple3,apache-spark,Apache Spark,我正在试验Spark作业,它将数据从Kafka流式传输到Cassandra 我正在使用的示例在给定的时间间隔内提取一组单词,并将单词计数发布到Cassandra。我还试图将时间戳与单词及其计数一起发布 到目前为止,我掌握的情况如下: JavaPairReceiverInputStream消息= 创建流(jssc、zkQuorum、groupId、topicMap); JavadStreamLines=messages.map(Tuple2::2); JavaDStream words=lines

我正在试验Spark作业,它将数据从Kafka流式传输到Cassandra

我正在使用的示例在给定的时间间隔内提取一组单词,并将单词计数发布到Cassandra。我还试图将时间戳与单词及其计数一起发布

到目前为止,我掌握的情况如下:

JavaPairReceiverInputStream消息=
创建流(jssc、zkQuorum、groupId、topicMap);
JavadStreamLines=messages.map(Tuple2::2);
JavaDStream words=lines.flatMap(x->Arrays.asList(SPACE.split(x)).iterator());
JavaPairDStream wordCounts=words.mapToPair(s->new Tuple2(s,1))
.还原基((i1,i2)->i1+i2);
现在,我试图将时间戳添加到这些记录中。我试过的是这样的:

Tuple3最终记录=
map(s->new Tuple3(s._1(),new Date().getTime(),s._2());
当然,这在我的IDE中显示为错误的。我对使用Spark库和编写这种形式(我想是基于lambda的)函数是完全陌生的


有人能帮我纠正这个错误并实现我想做的吗?

在网上搜索并学习一些例子后,我能够实现我想要的,如下所示

为了将timestamp属性附加到具有两个值的现有元组,我必须创建一个简单的bean,用它表示我的Cassandra

公共静态类WordCountRow实现可序列化{
字串=”;
长时间戳;
整数计数=0;
然后,我将JavaPairDStream结构中的(word,count)Tuple2对象映射到一个JavaDStream结构,该结构保存上述WordCountRow类的对象

JavaDStream wordCountRows=wordCounts.map((函数)
tuple->newwordcountrow(tuple.\u 1,new Date().getTime(),tuple.\u 2));
最后,我可以在这个结构上调用foreachRDD方法(它返回WordCountRow的对象),我可以逐个写入Cassandra

wordCountRows.foreachRDD((VoidFunction2)(rdd,time)->{
final SparkConf sc=rdd.context().getConf();
最终CassandraConnector cc=CassandraConnector.apply(sc);
rdd.foreach((VoidFunction)字数->{
try(Session Session=cc.openSession()){
字符串查询=String.format(Joiner.on(“”).join(
“插入测试密钥空间。单词计数”,
“(字、字、数)”,
“值('%s',%s,%s);”,
wordCount.word,wordCount.timestamp,wordCount.count);
执行(查询);
}
});
});
谢谢