Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaSparkStreamingContext中执行查询_Java_Apache Spark_Neo4j_Spark Streaming - Fatal编程技术网

在JavaSparkStreamingContext中执行查询

在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

我有一个使用Spark
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)
}