SQL的三种执行方式

第一种:

逐行执行,SQL就是调用select,然后在select中传函数(UFD输入一行返回一行),对于RDD,就是调用底层new MapPartitionsRDD,不论是SQL还是RDD都不需要shuffle

第二种:

分组执行:
    select gender, avg(age), count(*) from tb_student group by gender
    SQL就是调用Select,必须要求Select的字段要么在聚合函数里面SUM(meney),要么在group by之后,有几个组就返回几行。如果是RDD,调用reduceByKey,可以进行局部聚合的就先在分区内局部聚合,然后在全局聚合,如果不能局部聚合和,就先分组,然后在运算
特殊情况:select avg(age), count(*) from tb_student,RDD调用的是reduce(这种特殊情况就是把整个表当成一个组)

第三种:

划分窗口
           select 多个字段,窗口函数() Over(Parition By 字段) from 表,注意没有group By
           会划分出很多的窗口,一个窗口中有多少行数据就输出多少行数据
           RDD:先分组,然后调用flatMapValues,(排序可选)输入的迭代器进行处理,要返回一个迭代器或集合
           RDD:先分区,(排序可选)然后mapPartitions,对数据进行处理,必须要返回一个迭代器

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值