用spark流scala应用聚合函数

用spark流scala应用聚合函数,scala,apache-spark,spark-streaming,aggregation,Scala,Apache Spark,Spark Streaming,Aggregation,我需要使用apache spark streaming NO apache spark streaming SQL对数据流应用聚合函数 在我的例子中,我有一个卡夫卡制作人以JSON格式发送消息。 格式为{'a':字符串,'b':字符串,'c':整数,'d':双精度} 我需要每5秒对属性“a”和“b”进行聚合,并且我必须对其他2个属性应用聚合函数,例如平均值、总和、最小值或最大值 我该怎么做 感谢让您开始,您可以这样处理聚合: import sparkSession.implicits._ js

我需要使用apache spark streaming NO apache spark streaming SQL对数据流应用聚合函数

在我的例子中,我有一个卡夫卡制作人以JSON格式发送消息。 格式为{'a':字符串,'b':字符串,'c':整数,'d':双精度}

我需要每5秒对属性“a”和“b”进行聚合,并且我必须对其他2个属性应用聚合函数,例如平均值、总和、最小值或最大值

我该怎么做


感谢

让您开始,您可以这样处理聚合:

import sparkSession.implicits._

jsonDstream.foreachRDD{jsonRDD => 
  val df = sparkSession.read.json(jsonRDD)
  val aggr = df.groupBy($"a", $"b").agg(avg($"c"))
  ... do something with aggr ...
}

你已经试过reduce函数了吗?问题是reduce函数接受2个参数并返回1。我需要有相同的模式。换句话说,如果我的初始模式是{'a':String,'b':String,'c':Integer,'d':Double},那么带有AVG聚合函数的结果模式应该是{'GROUPBYa':String,'GROUPBYb':String,'AVGc':Integer,'AVGd':Double}。您还可以使用transform或foreachRDD并应用任意RDD函数,或者转换为Dataframes并使用Dataframes聚合API