栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hive UDF 开发过程中遇到的DoubleWritable问题

Hive UDF 开发过程中遇到的DoubleWritable问题

发现问题

在开发Hive UDF的时候遇到了一个异常:

java.lang.ClassCastException: org.apache.hadoop.io.DoubleWritable cannot be cast to org.apache.hadoop.hive.serde2.io.DoubleWritable
排查原因

查看编写的udf代码:

@Override
public Object evaluate(DeferredObject[] arguments) throws HiveException {
    double result = 
    return new DoubleWritable(result);
}

代码里引用的是org.apache.hadoop.io.DoubleWritable这个类,但是hive需要使用org.apache.hadoop.hive.serde2.io.DoubleWritable这个类,于是抛出了异常。

解决方案

修改引用import org.apache.hadoop.hive.serde2.io.DoubleWritable;

思考

为什么hive要有自己的DoubleWritable呢?

查看hive源码:

package org.apache.hadoop.hive.serde2.io;

import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;

import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.io.WritableComparator;


public class DoubleWritable extends org.apache.hadoop.io.DoubleWritable {

  public DoubleWritable() {
    super();
  }

  public DoubleWritable(double value) {
    super(value);
  }

  static { // register this comparator
    WritableComparator.define(DoubleWritable.class, new Comparator());
  }

}

可以看到这个类的目的是兼容老版本的hadoop,并且也考虑在未来的版本中移除。

我这边目前还在使用2.X的hadoop,截至目前(2022.03.01)hive最新的版本为2.3.9,仍然保留了这个类。

总结

未来在开发hive udf的时候要注意使用org.apache.hadoop.hive.serde2.io.DoubleWritable.

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/752217.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号