spark sql

Dataset&DataFrame介绍

  • Dataset是特定领域对象的强类型分布式数据集合
  • 与RDD类似,Dataset的操作分为transformation和action两类,只有调用action操作时,才会触发transformation类计算操作
  • Dataset内部包括Encoder,负责特定领域对象到spark内部类型系统的序列化和反序列化(即把领域对象转换为关系表的行列格式)
  • DataFrame是数据类型为Row的Dataset(Dataset[Row])

sql到Dataset

sql解析流程

  1. sql语句通过antlr进行词法和语法分析后形成抽象语法树
  2. antlr运行时,提供了监听器和访问者模式实现对生成的语法树进行遍历,监听器自动进行,而访问者模式需要调用visit方法来访问节点
  3. AstBuilder扩展了antlr 生成的默认访问者模式实现类,从而实现从抽象语法树到LogicalPlan的转换
  4. LogicalPlan被优化后通过QueryPlanner转换成物理执行计划(SparkPlan)

LogicalPlan&SparkPlan

  1. LogicalPlan和SparkPlan都是树形结构
  2. 包括叶子节点(LeafNode、LeafExecNode)、单亲节点(UnaryNode、UnaryExecNode)、双亲节点(BinaryNode、BinaryExecNode)三种节点类型

Dataset生成

  1. sql被解析成LogicalPlan后会被封装成QueryExecution
  2. QueryExecution负责管理LogicalPlan的优化以及到物理计划的转换
  3. 每个Dataset除了携带Encoder(负责领域对象到内部类型系统的序列化和反序列化)之外,还包括描述计算的LogicalPlan
  4. Dataset生成之后,只有在调用action类方法时才会触发计算
def sql(sqlText: String): DataFrame = {
   
    Dataset.ofRows(self, sessionState.sqlParser.parsePlan(sqlText))
  }


def ofRows(
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值