自定义UDF函数实现字符串转json格式

步骤:

1.idea 创建maven工程

2.pom.xml文件配置如下依赖

<!--添加hadoop依赖-->

<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>${hadoop.version}</version>
</dependency>
<!--添加hive依赖-->
<!-- https://mvnrepository.com/artifact/com.facebook.presto.hive/hive-apache -->
<dependency>
<groupId>com.facebook.presto.hive</groupId>
<artifactId>hive-apache</artifactId>
<version>1.2.0-1</version>
<artifactId>json</artifactId>

<version>20171018</version>


package com.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.LinkedHashMap;
public class ToJsonUDF extends UDF {
//重写evaluate方法
public String evaluate(String str){
String[] arr = str.split( ",");
String hdtcid_md5 = arr[ 0];
String hashID = arr[ 1];
Object hdtcid= arr[2];
String[] interests = arr[ 3].toString().split( " \\ |");
String permanentCity = arr[ 5];
String lastCity = arr[ 6];
// System.out.println(permanentCity);
//要创建JSON格式的数据,首先要创建一个整体的JSON的对象,作为一个容器
JSONObject object= new JSONObject( new LinkedHashMap());
//接下来构建JSON数组,名称是 interest
JSONArray array= new JSONArray();
for ( int i= 0;i<interests. length;i++) {
//System.out.println(interests[i]);
JSONObject lan1= new JSONObject();
lan1.put( "tag_id", interests[i]);
//将 lan1 添加到 array
array.put(lan1);
}
//添加数据
object.put( "_id",hdtcid_md5);
object.put( "hash_id",hashID);
object.put( "interest",array);
object.put( "permanent_city",permanentCity);
object.put( "last_city",lastCity);
//System.out.println(object.toString());
return object.toString();
}
//Test
public static void main(String[] args) {
ToJsonUDF toJsonUDF = new ToJsonUDF();
String str = "ffff754d7fd510c328f449749db96ab8,5,0dee83f3d8aa46d3e74c1b9b25ce78ca4ff8d322af7078b04dd467950e35c752,111110|11112|222222,interest,11111,1111,city";
JSONObject evaluate = toJsonUDF.evaluate(str);
System.out.print(evaluate);
}

}

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值