import java.util.HashMap;public class MyUDF{  /**   * UDF Evaluate接口   *   * UDF在记录层面上是一对一,字段上是一对一或多对一。 Evaluate方法在每条记录上被调用一次,输入为一个或多个字段,输出为一个字段   */  public Double evaluate(String a, String b) {    // TODO: 请按需要修改参数和返回值,并在这里实现你自己的逻辑    if(a==null || b==null)      return 0.0;    String temp1[]=a.split(",");    String temp2[]=b.split(",");    if (temp1==null || temp2==null) {      return 0.0;    }    HashMap<String, Double> map1=new HashMap<String, Double>();    HashMap<String, Double> map2=new HashMap<String, Double>();    for(String temp:temp1)    {      String t[]=temp.split(":");      map1.put(t[0], Double.parseDouble(t[1]));    }    for(String temp:temp2)    {      String t[]=temp.split(":");      map2.put(t[0], Double.parseDouble(t[1]));    }    double fenzi=0;    double fenmu1=0;    for(String i:map1.keySet())    {      double value=map1.get(i);      if (map2.get(i)!=null) {        fenzi+=value*map2.get(i);      }      fenmu1+=value*value;    }    double fenmu2=0;    for(double i:map2.values())    {      fenmu2+=i*i;    }    double fenmu=Math.sqrt(fenmu1)*Math.sqrt(fenmu2);    return fenzi/fenmu;  }  public static void main(String[] args) {    String a="12:500,14:100,20:200";    String b="12:500,14:100,30:100";    MyUDF myUDF=new MyUDF();    System.out.println(myUDF.evaluate(a, b));  }}