Datax-HdfsWriter如何实现支持Map,List,Set等符合类型数据写入

本文介绍了如何将DataX升级到3.0版本,并针对Hadoop 2.7.3和Hive 2.3.2环境,实现对HDFS写入Map类型数据的支持。通过改造HdfsWriter,新增对Map数据类型的处理,包括在SupportHiveDataType中添加MAP类型,修改HdfsHelper以处理Map数据。测试结果显示,Map数据能成功写入Hive的Map字段,对于Text格式的数据,需要额外处理并指定字段分隔符。最后提供了测试案例及代码地址。

一、问题背景

      之前分析hdfswriter时,看到过api支持map,list,set类型的数据写入,因此,想将其合入到datax里,使得源数据端有类似json,array等这种数据可以直接导入到hive中。

二. 环境准备

Datax版本:3.0

Hadoop版本:2.7.3

Hive版本:2.3.2

三. 源码

       hdfs写入时,最重要的是获取字段对应类型的ObjectInspector,因此直接从ObjectInspectorFactory类入手看:

ObjectInspectorFactory:

private static ObjectInspector getReflectionObjectInspectorNoCache(Type t, ObjectInspectorFactory.ObjectInspectorOptions options) {
...
if (t instanceof ParameterizedType) {
	ParameterizedType pt = (ParameterizedType)t;
	if (List.class.isAssignableFrom((Class)pt.getRawType()) || Set.class.isAssignableFrom((Class)pt.getRawType())) {
	    return getStandardListObjectInspector(getReflectionObjectInspector(pt.getActualTypeArguments()[0], options));
	}

	if (Map.class.isAssignableFrom((Class)pt.getRawType())) {
	    return getStandardMapObjectInspector(getRefle
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值