Este artigo descreve a implementação Java da função de similaridade de cosseno do cálculo da matriz esparsa. Compartilhe -o para sua referência, como segue:
importar java.util.hashmap; classe pública myudf { /*** udf avaliar interface** udf é um para um no nível de registro e um para um ou muitos para um no campo. O método de avaliação é chamado uma vez em cada registro, entrada como um ou mais campos e saída como um campo*/ Public Double avaliação (string a, string b) {// TODO: Modifique os parâmetros e retorne os valores conforme necessário e implemente sua própria lógica aqui se (a == null || b == null) retornar 0,0; String temp1 [] = a.split (","); String temp2 [] = b.split (","); if (temp1 == null || temp2 == null) {return 0.0; } Hashmap <string, duplo> map1 = new hashmap <string, duplo> (); Hashmap <string, double> map2 = new hashmap <string, duplo> (); for (string temp: temp1) {string t [] = temp.split (":"); map1.put (t [0], duplo.parseDouble (t [1])); } para (string temp: temp2) {string t [] = temp.split (":"); map2.put (t [0], duplo.parseDouble (t [1])); } dupla fenzi = 0; duplo fenmu1 = 0; for (string i: map1.keySet ()) {duplo valor = map1.get (i); if (map2.get (i)! = null) {fenzi+= value*map2.get (i); } fenmu1+= valor*valor; } duplo fenmu2 = 0; para (Double i: map2.values ()) {fenmu2+= i*i; } duplo fenmu = math.sqrt (fenmu1)*math.sqrt (fenmu2); retornar 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)); }}Resultados em execução:
0,9135468796041984
Para obter mais informações sobre os algoritmos Java, os leitores interessados neste site podem visualizar os tópicos: "Estrutura de dados Java e tutorial de algoritmo", "Resumo das dicas de nó da operação Java Dom", "Resumo de dicas de operação de Java e Operação de Java" e "Resumo de Java cache" Tips "TIPS"
Espero que este artigo seja útil para a programação Java de todos.