Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
在Java Spark流中使用ForeachRDD内部的静态数据集进行数据流RDD并行处理_Java_Apache Spark_Spark Streaming - Fatal编程技术网

在Java Spark流中使用ForeachRDD内部的静态数据集进行数据流RDD并行处理

在Java Spark流中使用ForeachRDD内部的静态数据集进行数据流RDD并行处理,java,apache-spark,spark-streaming,Java,Apache Spark,Spark Streaming,我们有使用自定义接收器消费JSON消息的数据流。这个JSON消息只不过是一个用户请求,以一些输入参数的形式出现 JavaReceiverInputDStream<String> msgDStream = ssc.receiverStream(receiver); JavaReceiverInputDStream msgDStream=ssc.receiverStream(接收器); 另一件事是我有静态数据集(预加载),例如 Dataset loanDS=spark.read().

我们有使用自定义接收器消费JSON消息的数据流。这个JSON消息只不过是一个用户请求,以一些输入参数的形式出现

JavaReceiverInputDStream<String> msgDStream = ssc.receiverStream(receiver);
JavaReceiverInputDStream msgDStream=ssc.receiverStream(接收器);
另一件事是我有静态数据集(预加载),例如

Dataset loanDS=spark.read().parquet(“/path”)
现在在我的用例中,我想并行处理DStream RDDs数据(JSON消息)

msgDStream.foreachRDD(new VoidFunction<JavaRDD<String>>() {
@Override
public void call(JavaRDD<String> stringJavaRDD) throws Exception {
if(!stringJavaRDD.isEmpty()) {

System.out.println("Json string: " + requestJSON);
stringJavaRDD.foreach(new VoidFunction<String>(){
public void call(String s) throws Exception{
parseJSON(s); // externam utility to parse the JSON messages
{here i want to build aggregate clause, select clause based on the static dataset loanDS with the JSON messages}
}
});
}}});
msgDStream.foreachRDD(新的VoidFunction(){
@凌驾
公共void调用(JavaRDD stringJavaRDD)引发异常{
如果(!stringJavaRDD.isEmpty()){
System.out.println(“Json字符串:“+requestJSON”);
foreach(新的VoidFunction(){
公共无效调用(字符串s)引发异常{
parseJSON;//用于解析JSON消息的externam实用程序
{这里我想构建聚合子句,基于静态数据集的select子句与JSON消息一起loanDS}
}
});
}}});
当我在stringJavaRDD.foreach中使用loandDS时,它没有任何内容,因为foreach在工作节点上执行,而loanDS在驱动程序上存在


如何在foreach内部实现这一点,因为我希望在DStream RDD的并行中处理JSON消息。

首先,驱动程序中没有loanDS。和RDD一样,Dataset是分布式集合。第二,您不能在
foreach()
action中使用对RDD/数据集的操作。第三,您需要在
foreachRDD
函数中执行任何您想要的操作。我不太明白您想要实现什么,但我怀疑您需要以某种方式将RDD与
foreachRDD
中的Dataset连接起来。例如,在stringJavaRDD中,我有两条JSON消息作为来自接收方的字符串,现在我想将stringJavaRDD中的这两条JSON消息与loanDS数据集并行连接。如何在DStrea RDD中实现每个JSON消息的并行性。我知道数据流RDD是按顺序处理的,但我关心的是并行处理数据流RDD的内容。我懂了。实际上,
foreachRDD
是按顺序执行的。但RDD和数据集处理将并行进行。它与Spark中的批处理没有任何区别。因此,这意味着无论您在
foreachRDD
中对RDD和数据集执行什么处理,它都将并行工作。是的。。我们的数据流RDD并行实现用例
msgDStream.foreachRDD(new VoidFunction<JavaRDD<String>>() {
@Override
public void call(JavaRDD<String> stringJavaRDD) throws Exception {
if(!stringJavaRDD.isEmpty()) {

System.out.println("Json string: " + requestJSON);
stringJavaRDD.foreach(new VoidFunction<String>(){
public void call(String s) throws Exception{
parseJSON(s); // externam utility to parse the JSON messages
{here i want to build aggregate clause, select clause based on the static dataset loanDS with the JSON messages}
}
});
}}});