Apache spark Apache Spark数据流与HDFS序列文件中的静态数据记录连接的最佳方式是什么?

Apache spark Apache Spark数据流与HDFS序列文件中的静态数据记录连接的最佳方式是什么?,apache-spark,hdfs,streaming,sequence,Apache Spark,Hdfs,Streaming,Sequence,我的目标是使用SparkStreaming监视用户输入。用户的输入是数据流,只是数据记录的一个键(短字符串)。程序需要通过用户输入的键值从HDFS序列文件(单个记录30MB,整个数据集约10000条记录)中过滤和读取静态数据集(非常大的RDD,bigRDD)。然后程序计算bigRDD并将结果记录(每个记录30MB)返回给用户。我希望bigRDD的计算将尽可能地分布在本地,避免在网络上传输数据,并使用persist来减少硬盘IO时间。具体步骤应如何设计? 我试过: JavaStreamingCon

我的目标是使用SparkStreaming监视用户输入。用户的输入是数据流,只是数据记录的一个键(短字符串)。程序需要通过用户输入的键值从HDFS序列文件(单个记录30MB,整个数据集约10000条记录)中过滤和读取静态数据集(非常大的RDD,bigRDD)。然后程序计算bigRDD并将结果记录(每个记录30MB)返回给用户。我希望bigRDD的计算将尽可能地分布在本地,避免在网络上传输数据,并使用persist来减少硬盘IO时间。具体步骤应如何设计? 我试过:

JavaStreamingContext jsc = new JavaStreamingContext(...) ;
JavaDStream<String> lines = jsc.socketTextStream(...) ;
seqRDD = jsc.sparkContext().sequenceFile(...);// RDD from sequence file can not cache.
bigRDD = pairRdd.mapToPair(...) ;// bigRDD is used for cache.
bigRDD.cache() ;
inputDStream = lines.mapToPair(...) ; // convert DStream<string> to PairDStream<string,string> for join.
inputDStream.foreachRDD (inputRdd-> {
  bigRDD2 = inputRdd.join(bigRDD);
  resultRDD = bigRDD2.map( ... do calculation ... );
  send_result_to_user(resultRDD) ;
})
JavaStreamingContext jsc=newJavaStreamingContext(…);
JavadStreamLines=jsc.socketTextStream(…);
seqRDD=jsc.sparkContext().sequenceFile(…);//序列文件中的RDD无法缓存。
bigRDD=pairRdd.mapToPair(…);//bigRDD用于缓存。
bigRDD.cache();
inputDStream=lines.mapToPair(…);//将数据流转换为成对流以进行连接。
inputDStream.foreachRDD(inputdd->{
bigRDD2=inputdd.join(bigRDD);
resultRDD=bigRDD2.map(…进行计算…);
将结果发送给用户(resultRDD);
})

但我不知道这些步骤是否合适?

我将尝试每批广播来自DStream.RDD.collection()的数据,并使用RDD mapPartitions来处理数据