`

hive编写udf处理非utf-8数据

阅读更多

      hive默认都是utf-8编码处理数据的,如果原始数据不是utf-8,例如是gbk,我们怎么处理这种数据呢?

 

方式很简单,我们写udf的时候,继承GenericUDF类就行了。例如:

 

 

 

public class CharsetConvertor extends GenericUDF {

	private transient StringObjectInspector oi = null;

	@Override
	public ObjectInspector initialize(ObjectInspector[] arguments)
			throws UDFArgumentException {
		oi = (StringObjectInspector) arguments[0];
		
		return PrimitiveObjectInspectorFactory.writableStringObjectInspector;
	}

	@Override
	public Object evaluate(DeferredObject[] arguments) throws HiveException {
		try {
			Text t = oi.getPrimitiveWritableObject(arguments[0].get());
			// 得到原始字节
			byte[] bytes = t.getBytes();
			// 这里假定原始数据是gbk编码,使用gbk解码
			String gbkStr = new String(bytes, "GBK");
			// 对gbkStr进行处理。。。
			
			// 最后根据需要使用相应的字符集输出,例如这里仍然使用原始的GBK输出
			Text new_str = new Text(gbkStr.getBytes("GBK"));

			return new_str;
		} catch (Exception e) {
			return new Text("Charset conversion failed.");
		}
	}

	@Override
	public String getDisplayString(String[] paramArrayOfString) {
		// TODO Auto-generated method stub
		return null;
	}
}

 

 

分享到:
评论
4 楼 jimmee 2016-01-16  
nk_tocean 写道
照着做了,但是不行啊,还是乱码.

先确认你原始编码是否是GBK吧
3 楼 nk_tocean 2015-12-30  
照着做了,但是不行啊,还是乱码.
2 楼 csuwhl 2014-04-09  
搂主是正确的,刚刚招到原因,我自己写了一个serde,里面用了text.toString方法,导致text被utf8了.

1 楼 csuwhl 2014-04-09  
请问,你这个做过测试不,我怎么自己试了不行呢

Text t = oi.getPrimitiveWritableObject(arguments[0].get());

byte[] bytes = t.getBytes(); 

这个流好像已经是用utf8从hdfs里读出来的.

相关推荐

    hive案例之---------微博数据分析及答案.zip

    Hive是Apache Hadoop生态系统中的一个数据仓库工具,它允许用户使用SQL-like查询语言(HQL)来处理存储在Hadoop分布式文件系统(HDFS)上的大数据集。在这个“hive案例之---------微博数据分析及答案”的项目中,...

    DBeaver链接hive驱动包下载: hive-jdbc-uber-2.6.5.0-292.jar

    《DBeaver与Hive连接:hive-jdbc-uber-2.6.5.0-292.jar驱动详解》 在大数据处理领域,Hive作为一个基于Hadoop的数据仓库工具,广泛用于数据查询和分析。而DBeaver,作为一款跨平台的数据库管理工具,以其用户友好的...

    hive驱动包hive-jdbc-uber-2.6.5.0-292.jar(用户客户端连接使用)

    标题中的"**hive-jdbc-uber-2.6.5.0-292.jar**"是一个Uber(也称为Shaded)JAR文件,它集成了Hive JDBC驱动的所有依赖项。Uber JAR的目的是为了方便部署,因为它将所有必需的库合并到一个单一的文件中,避免了类路径...

    编译的spark-hive_2.11-2.3.0和 spark-hive-thriftserver_2.11-2.3.0.jar

    spark-hive_2.11-2.3.0...spark-hive-thriftserver_2.11-2.3.0.jar log4j-2.15.0.jar slf4j-api-1.7.7.jar slf4j-log4j12-1.7.25.jar curator-client-2.4.0.jar curator-framework-2.4.0.jar curator-recipes-2.4.0.jar

    含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz

    含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz 含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-3.1.2-bin.tar.gz 含两个文件hive-jdbc-3.1.2-standalone.jar和apache-hive-...

    spark-hive-thriftserver_2.11-2.1.3-SNAPSHOT-123456.jar

    spark-hive-thriftserver_2.11-2.1.spark-hive-thrift

    hive-exec-2.1.1.jar

    1. **配置Hive配置文件**:修改`hive-site.xml`,确保`hive.exec.charset`和`hive.server2.logging.operation.charset`等属性设置为UTF-8,以支持中文字符。 2. **检查HDFS文件编码**:确保存储在HDFS中的数据文件...

    Hive-2.1.1-CDH-3.6.1 相关JDBC连接驱动 Jar 包集合

    02、hive-exec-2.1.1-cdh6.3.1.jar 03、hive-jdbc-2.1.1-cdh6.3.1.jar 04、hive-jdbc-2.1.1-cdh6.3.1-standalone.jar 05、hive-metastore-2.1.1-cdh6.3.1.jar 06、hive-service-2.1.1-cdh6.3.1.jar 07、libfb303-...

    Hive的Udf函数进行数据脱敏

    在大数据处理领域,Apache Hive 是一个非常重要的工具,它提供了SQL-like接口来处理存储在分布式存储系统(如HDFS)中的大规模数据集。Hive 的 User Defined Functions (UDFs) 是用户自定义函数,允许开发者扩展Hive...

    hive-jdbc-uber-2.6.5.0-292.jar驱动

    7. **性能优化**:通过优化网络通信和数据传输,提高数据查询和处理的速度。 **Dbeaver与Hive JDBC驱动的结合使用:** Dbeaver是一款多平台的数据库管理工具,支持多种数据库系统,包括Hive。通过集成Hive JDBC驱动...

    flink-sql-connector-hive-3.1.2-2.12-1.15.4.jar

    flink-sql-connector-hive-3.1.2-2.12-1.15.4.jar

    hive-testbench-hive14.zip大数据TPCDS-99SQL自动测试脚本

    在“hive-testbench-hive14.zip”这个压缩包中,包含了针对Hive 1.4版本的测试脚本,这是一组精心设计的测试用例,用于评估Hive在处理TPCDS标准数据集时的性能。TPCDS包含99个标准SQL查询,这些查询涵盖了从简单到...

    hive-jdbc-2.1.1-cdh6.2.0-standalone.jar

    hive-jdbc-2.1.1-cdh6.2.0(ieda等jdbc链接hive2.1.1);cdh6.2.0安装的hive2.1.1

    (Hive输出)pentaho-big-data-kettle-plugins-hive-6.1.0.1-196

    (Hive输出)ETLDesigner\common\system\karaf\system\pentaho\pentaho-big-data-kettle-plugins-hive\6.1.0.1-196\下的文件。...(Hive输出)pentaho-big-data-kettle-plugins-hive-6.1.0.1-196。

    hive UDF需要jar包

    Hive UDF是Hive提供的一个强大特性,它允许用户创建自己的函数来处理数据。这些函数可以是单行输入单行输出的UDF,多行输入单行输出的UDF(UDAF,User Defined Aggregation Function),或者多行输入多行输出的UDTF...

    hive-jdbc-3.1.2-standalone

    hive-jdbc-3.1.2-standalone适用于linux

    hive-jdbc-uber-3.1.2+yanagishima-18.0

    在大数据处理领域,Apache Hive作为一款强大的数据仓库工具,被广泛用于存储、管理和分析大规模结构化数据。而Hive JDBC是连接Hive与各种客户端应用程序的桥梁,使得用户可以通过标准的JDBC接口来操作Hive。这里我们...

    Apache Hive(apache-hive-3.1.3-bin.tar.gz)

    Apache Hive(apache-hive-3.1.3-bin.tar.gz、apache-hive-3.1.3-src.tar.gz)是一种分布式容错数据仓库系统,支持大规模分析,并使用 SQL 促进读取、写入和管理驻留在分布式存储中的 PB 级数据。Hive 构建在 Apache...

    apache-hive-1.1.0-cdh5.7.1-bin.tar.gz

    在这个场景中,我们看到的是`apache-hive-1.1.0-cdh5.7.1-bin.tar.gz`的压缩包,这是用于在CDH(Cloudera Distribution Including Apache Hadoop)5.7.1版本上安装Hive 1.1.0的二进制文件。 首先,让我们深入了解...

    hive-jdbc-3.1.2-standalone.jar

    Hive连接的jar包——hive-jdbc-3.1.2-standalone.jar,使用数据库连接软件连接数据仓库时需要使用相应的驱动器驱动,希望对大家有所帮助

Global site tag (gtag.js) - Google Analytics