【Spark108】Spark SQL动态代码生成四

 

日志:

 

2015-09-02 14:46:27,765-[TS] DEBUG Executor task launch worker-3 org.apache.spark.sql.execution.joins.SortMergeJoin - Creating Projection: List(classId#2), inputSchema: List(stuId#0, stuName#1, classId#2), codegen:true
2015-09-02 14:46:27,766-[TS] DEBUG Executor task launch worker-3 org.apache.spark.sql.catalyst.expressions.codegen.GenerateProjection - MutableRow, initExprs: input[2, StringType] code:

 

 

代码


public SpecificProjection generate(org.apache.spark.sql.catalyst.expressions.Expression[] expr) {
  return new SpecificProjection(expr);
}

class SpecificProjection extends org.apache.spark.sql.catalyst.expressions.codegen.BaseProjection {
  private org.apache.spark.sql.catalyst.expressions.Expression[] expressions;
  
  
  
  public SpecificProjection(org.apache.spark.sql.catalyst.expressions.Expression[] expr) {
    expressions = expr;
    
  }
  
  @Override
  public Object apply(Object r) {
    return new SpecificRow((InternalRow) r);
  }
  
  final class SpecificRow extends org.apache.spark.sql.catalyst.expressions.codegen.CodeGenMutableRow {
    
    private UTF8String c0 = null;
    
    
    public SpecificRow(InternalRow i) {
      
      {
        // column0
        /* input[2, StringType] */
        
        boolean isNull0 = i.isNullAt(2);
        UTF8String primitive1 = isNull0 ? null : (i.getUTF8String(2));
        
        nullBits[0] = isNull0;
        if (!isNull0) {
          c0 = primitive1;
        }
      }
      
    }
    
    public int numFields() { return 1;}
    protected boolean[] nullBits = new boolean[1];
    public void setNullAt(int i) { nullBits[i] = true; }
    public boolean isNullAt(int i) { return nullBits[i]; }
    
    @Override
    public Object genericGet(int i) {
      if (isNullAt(i)) return null;
      switch (i) {
        case 0: return c0;
      }
      return null;
    }
    public void update(int i, Object value) {
      if (value == null) {
        setNullAt(i);
        return;
      }
      nullBits[i] = false;
      switch (i) {
        case 0: { c0 = (UTF8String)value; return;}
      }
    }
    
    
    
    @Override
    public int hashCode() {
      int result = 37;
      
      result *= 37; result += isNullAt(0) ? 0 : (c0.hashCode());
      return result;
    }
    
    @Override
    public boolean equals(Object other) {
      if (other instanceof SpecificRow) {
        SpecificRow row = (SpecificRow) other;
        
        if (nullBits[0] != row.nullBits[0] ||
          (!nullBits[0] && !(c0.equals(row.c0)))) {
          return false;
        }
        
        return true;
      }
      return super.equals(other);
    }
    
    @Override
    public InternalRow copy() {
      Object[] arr = new Object[1];
      if (!nullBits[0]) arr[0] = c0;
      return new org.apache.spark.sql.catalyst.expressions.GenericInternalRow(arr);
    }
  }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值