Es gibt eine UDF Java-Klasse wie folgt:Warum Text wird bevorzugt als String in Hive UDF Java-Klasse
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class Strip extends UDF {
private Text result = new Text();
public Text evaluate(Text str) {
if (str == null) {
return null;
}
result.set(StringUtils.strip(str.toString()));
return result;
}
public Text evaluate(Text str, String stripChars) {
if (str == null) {
return null;
}
result.set(StringUtils.strip(str.toString(), stripChars));
return result;
}
}
Hive tatsächlich unterstützt Java Primitiven in SEF (und einige andere Arten, wie zum Beispiel Java. util.List und java.util.Map), so eine Signatur wie:
public String evaluate(String str)
würde genauso gut funktionieren. Durch die Verwendung von Text können wir jedoch die Wiederverwendung von Objekten nutzen, , was zu Effizienzeinsparungen führen kann, so dass dies im Allgemeinen bevorzugt wird. Kann mir jemand den Grund nennen, warum Text bevorzugt wird? Warum könnten wir die Wiederverwendung von Objekten mithilfe von Text nutzen? Wenn wir den folgenden Befehl in Hive ausführen:
hive> SELECT strip(' bee ') FROM dummy;
Danach führen wir einen weiteren Befehl, dass Streifen Funktion, dann wird der Streifen Objekt wieder erstellt wird, nicht wahr? Also können wir es nicht wiederverwenden, oder?
Schauen Sie sich die http://stackoverflow.com/questions/19851665 – leftjoin
Text wandelbar ist, können Sie neuen Wert gesetzt, Objekt Wiederverwendung – leftjoin