這裏是一個Java版本。這對任何需要Hive UDF的人都很有用。翻譯的棘手部分是按位異或的運算符優先級,以及獲取Unicode的技巧。 爲了簡潔起見,類定義已被省略。
import java.util.List;
import java.util.ArrayList;
static int domain_hash(String s) {
List<Integer> d = get_string_charCodes(s);
int a=0,c=0,h,o;
if (d.size() == 0) {
return(1);
}
for(h = d.size()-1; h >= 0; h--) {
o = d.get(h);
a = ((a << 6) & 268435455) + o + (o << 14);
c = a & 266338304;
if (c != 0) {
a = a^(c>>21);
}
}
return(a);
}
static List<Integer> get_string_charCodes(String s) {
List<Integer> l = new ArrayList<Integer>();
int length = s.length(), codepoint, offset;
for(offset = 0; offset < length; offset += Character.charCount(codepoint)) {
codepoint = s.codePointAt(offset);
l.add(codepoint);
}
return(l);
}
出於好奇,你用什麼語言來建造它? – Yahel 2011-01-27 21:08:36
Javascript。它將進入一個必須從file:// url工作的系統,該文件可悲地不支持cookies。 ga.js需要cookies。 – 2011-01-27 21:22:07