Spark expression Codegen 之code代码块

本文深入探讨了Spark的代码生成机制,重点关注了Scala字符串插值和`code`代码块的概念。通过示例解释了`code`代码块如何在`CastSuite`测试用例中用于`castToBooleanCode`方法,展示了表达式值如何被替换并最终形成完整的执行代码。文章还阐述了`ExprCode`类的角色,以及如何通过连接子节点和父节点的`ExprCode`来构建代码生成的逻辑流程。理解这些概念对于掌握Spark的内核工作原理至关重要。

背景

本文基于spark 3.2.0
由于codegen涉及到的知识点比较多,我们先来说清楚code"""""",我们暂且叫做code代码块

scala 字符串插值

要想搞清楚spark的code代码块,就得现搞清楚scala 字符串插值。
scala 字符串插值是2.10.0版本引用进来的新语法规则,可以直接允许使用者将变量引用直接插入到字符串中,如下:

val name = 'LI'
println(s"My name is $name")
输出:
My name is LI

这种资料很多,大家自行查阅资料理解。

code代码块

因为这块代码比较复杂,直接拿出例子来运行:
直接找到spark CastSuite.scala 第215行如下:

test("cast string to boolean II") {
    checkEvaluation(cast("abc", BooleanType), null)

之后在javaCode.scala 输出对应的想要debug的值,如下:

 */
    def code(args: Any*): Block = {
      sc.checkLengths(args)
      if (sc.parts.length == 0) {
        EmptyBlock
      } else {
        args.foreach {
          case _: ExprValue | _: Inline | _: Block =>
          case _: Boolean | _: Byte | _: Int | _: Long | _: Float | _: Double | _: String =>
          case other 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值