Flink中Aggregate算子示例理解

作用在分组上

现将元组简单处理

import org.apache.flink.api.java.aggregation.Aggregations
import org.apache.flink.api.scala.{DataSet, ExecutionEnvironment}
import org.apache.flink.streaming.api.scala._
object AggregateTest {
  def main(args: Array[String]): Unit = {
    // flink 批处理
    val env = ExecutionEnvironment.getExecutionEnvironment
    val input: DataSet[(Int, String, Double)] = env.fromElements(
      (1, "hello", 4.0),
      (1, "hello", 5.0),
      (1, "hello", 5.0),
      (3, "world", 6.0),
      (3, "world", 6.0)
    )
    // 批处理API 以上面元组字符串分组
    val output = input.groupBy(1)
      //同一个DataSet上的多个Aggregate函数之间用and连接
      //在根据字符串分组的基础上,对Int属性求和
      .aggregate(Aggregations.SUM, 0)
      //再对Double属性求最小值
      .and(Aggregations.MIN, 2)
      .print()
  }
}

输出结果:

(6,world,6.0)
(3,hello,4.0)

测试1:

// Int属性求和输出
  .aggregate(Aggregations.SUM, 0)
      .print()

输出结果

(6,world,6.0)
(3,hello,5.0)

测试2:

// Double属性求最小输出
 .aggregate(Aggregations.MIN, 2).print()

输出结果

(3,world,6.0)
(1,hello,4.0)

作用在整个DataSet上

import org.apache.flink.api.java.aggregation.Aggregations
import org.apache.flink.api.scala.{DataSet, ExecutionEnvironment}
import org.apache.flink.streaming.api.scala._

object AggregateTest {
  def main(args: Array[String]): Unit = {
    // flink 批处理
    val env = ExecutionEnvironment.getExecutionEnvironment
    val input: DataSet[(Int, String, Double)] = env.fromElements(
      (1, "hello", 4.0),
      (1, "hello", 5.0),
      (1, "hello", 5.0),
      (3, "world", 6.0),
      (3, "world", 6.0)
    )
 
    val output = input 
    //去掉分组
      .aggregate(Aggregations.SUM, 0)
      .and(Aggregations.MIN, 2)
      .print()
  }
}

输出结果

(9,world,4.0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值