java:
//注册UDF
sqlContext.udf.register("getImei",new GetImei,StringType)
-
public class GetImei implements UDF1<String,String>{ //入参类型和返回类型
-
-
-
@Override
-
public String call(String jsonStr){
-
-
try{
-
-
if(jsonStr.contains("imei")){ //安卓类型
-
int startNum = jsonStr.indexOf("imei");
-
return jsonStr.substring(startNum+7,startNum+22);
-
}else if(jsonStr.contains("idfv")){ //ios类型
-
int startNum = jsonStr.indexOf("idfv");
-
return jsonStr.substring(startNum+7,startNum+43);
-
}else{ //没有值需往前推
-
return "None";
-
}
-
}catch(Exception e){
-
return "None";
-
}
-
-
}
-
-
}
scala:
-
def getLen(text:String):Int = text.length()
-
sqlContext.udf.register("getLen",getLen _)
-
sqlContext.sql("select getLen(appId) from wzx limit 10").collect().foreach(println)
-
-
def getLenBool(text:String,len:Integer):Boolean = text.length()>len
-
sqlContext.udf.register("getLenBool",getLenBool _)
-
sqlContext.sql("select getLenBool(appId,10) from wzx limit 10").collect().foreach(println)
自定义时间戳转换函数 类似于FROM_UNIXTIME:
-
import java.text.SimpleDateFormat
-
import java.util.Date
-
import java.util.TimeZone
-
def getTimeBySeal(seal:Long):String={
-
val format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
-
format.setTimeZone(TimeZone.getTimeZone("GMT+8"))
-
val time=new Date(seal*1000L)
-
val d = format.format(time)
-
d
-
}
-
-
sqlContext.udf.register("convertTime",getTimeBySeal _)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29754888/viewspace-2093226/
,如需转载,请注明出处,否则将追究法律责任。