我有来自物联网设备的数据流。每个设备都有设备ID和一些指标。我需要在固定时间间隔的每个窗口中计算设备ID上的那些度量的最小值,最大值,平均值。并且我需要为每个上面的窗口时间保持最小,最大,平均聚合。如果当天更改那些min,max,avgs应该重置为当天。每个窗口间隔中都会发生这种情况。我需要在每个窗口中将这些valuse写入kafka流主题。
例如:有一个学生ID流及其标记。我需要在窗口中计算学生ID的最小值,最大值,平均值。我需要将它们保存在数据帧中。在每个窗口中都会发生min,max,avg shulud的计算。我需要在每个窗口中将这些valuse写入kafka流主题。一旦Day chanes持续存在的值需要重置。
对于这种情况,我可以使用Spark结构化流式传输或Dstreaming。如果是这样,请让我知道完成这项工作的程序。
答案 0 :(得分:0)
每个窗口都基于持续时间。在spark中,每个窗口都被抽象为DStream
,只有RDD's
的集合。
您可以将RDD转换为数据集/数据帧,然后使用SparkSession执行查询。
例如,你可以这样做
JavaPairInputDStream<String, String> directKafkaStream = KafkaUtils.createDirectStream(ssc, String.class,
String.class, StringDecoder.class, StringDecoder.class, kafkaParams, topics);
JavaDStream<String> invStream = directKafkaStream.map(rdd -> {
logger.info("Input JSON String ------->" + rdd._2);
System.out.println("Input JSON String ------->" + rdd._2);
return rdd._2;
});
invStream.foreachRDD(invrdd -> {
Dataset<Row> inputDataset = sparkSession.read().json(invrdd);
inputDataset.createOrReplaceTempView("temptable");
sparkSession.sql("/write your query");
});