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

时间:2018-05-09 09:44:57

标签: java apache-spark spark-streaming

我们有DStreams使用自定义接收器消耗JSON消息。这些JSON消息只是一些输入参数形式的用户请求。

JavaReceiverInputDStream<String> msgDStream = ssc.receiverStream(receiver);

另一件事是我有静态数据集(预加载),例如

Dataset<Row> loanDS = spark.read().parquet("/path")

现在在我的用例中,我想并行处理DStream RDD数据(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}
}
});
}}});

当我在stringJavaRDD.foreach中使用loandDS时,它没有任何东西,因为foreach在工作节点上执行,而loanDS存在于Driver上。

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

0 个答案:

没有答案