在JavaSparkStreamingContext中执行查询
我有一个使用Spark在JavaSparkStreamingContext中执行查询,java,apache-spark,neo4j,spark-streaming,Java,Apache Spark,Neo4j,Spark Streaming,我有一个使用SparkJavaStreamingContext的程序。我了解到,在使用数据流时,只允许进行一些输出操作,如print()。 这是一段代码 private static void analyzeHashtags() throws InterruptedException { JavaPairDStream<String, String> messages = KafkaUtils.createStream(jssc, zookeeper_server, kaf
JavaStreamingContext
的程序。我了解到,在使用数据流时,只允许进行一些输出操作,如print()
。
这是一段代码
private static void analyzeHashtags() throws InterruptedException {
JavaPairDStream<String, String> messages = KafkaUtils.createStream(jssc, zookeeper_server, kafka_consumer_group, topics);
JavaPairDStream<String, Integer> lines = messages.mapToPair((x)->(new Tuple2<String, Integer>(x._2, 1))).reduceByKey(sumFunc);
lines.print();
jssc.start();
jssc.awaitTermination();
}
private static void analyzeHashtags()抛出InterruptedException{
JavaPairDStream messages=KafkaUtils.createStream(jssc、zookeeper_服务器、kafka_消费者_组、主题);
JavaPairDStream lines=messages.mapToPair((x)->(新的Tuple2(x.。_2,1)).reduceByKey(sumFunc);
line.print();
jssc.start();
jssc.aittimination();
}
现在我想将查询操作添加到此代码中,如下所示:
private static void analyzeHashtags() throws InterruptedException, SQLException {
JavaPairDStream<String, String> messages = KafkaUtils.createStream(jssc, zookeeper_server, kafka_consumer_group, topics);
JavaPairDStream<String, Integer> lines = messages.mapToPair((x)->(new Tuple2<String, Integer>(x._2, 1))).reduceByKey(sumFunc);
lines.print();
String hashtag = "#dummy"; int frequencies = 59;
String cql = " CREATE (n:Hashtag {name:'"+hashtag+"', freq:"+frequencies+"})";
st.executeUpdate(cql);
jssc.start();
jssc.awaitTermination();
}
private static void analyzeHashtags()抛出InterruptedException、SQLException{
JavaPairDStream messages=KafkaUtils.createStream(jssc、zookeeper_服务器、kafka_消费者_组、主题);
JavaPairDStream lines=messages.mapToPair((x)->(新的Tuple2(x.。_2,1)).reduceByKey(sumFunc);
line.print();
字符串hashtag=“#dummy”int frequencies=59;
String cql=“CREATE(n:Hashtag{name:'”+Hashtag+”,freq:“+frequencies+”})”;
圣executeUpdate(cql);
jssc.start();
jssc.aittimination();
}
但是这段代码只执行一次查询。我希望它在每次循环时都执行它。
这怎么可能呢?提前感谢。要在数据流上执行任意操作,我们使用
foreachRDD
。它在每个批处理间隔提供对数据的访问,这些批处理间隔由底层rdd表示
Java/Scala伪(混合)代码:
谢谢你完整而有用的回答。我只是不知道如何在Java(idkscala)中实现
foreachRDD
部分。使用lambda表达式,我是否应该编写行。foreachRDD(rdd->(…
用函数代替dots?我个人建议使用Scala和Spark Streaming。对于foreachRDD
lambda的Java翻译,我想你可以在Spark Streaming示例pkg中找到一个示例。例如:
JavaPairDStream<String, Integer> lines = messages.mapToPair((x)->(new
Tuple2<String, Integer>(x._2, 1))).reduceByKey(sumFunc);
lines.foreachRDD{ rdd =>
.. do something with the RDD here...
}
lines.foreachRDD{ rdd =>
val localDataCollection = rdd.collect
localDataCollection.foreach{ keywordFreqPair =>
val cql = "CREATE (n:Hashtag {name:'"+keywordFreqPair._1+"', freq:"+keywordFreqPair._2+"})"
st.executeUpdate(cql)
}