Ich beschäftige mich mit einem Dataset<Row>
in Apache Spark mit Java und müssen ein tuneinige mathematische Transformationen über alle Spalten in diesem Datensatz. Eine der Transformationen besteht im Wesentlichen darin, das Protokoll aller Werte zu erhalten, die in diesem Datensatz gespeichert sind und immer noch zurückkehren Dataset<Row>
. Ich sehe klar, wie man das in einem tut map
Funktion in einer RDD, aber wie kann ich das in einem tun Dataset<Row>
?
Kontext: Dataset<Row> old
enthält 2 Spalten a
und b
. Ich möchte ein neues zurückgeben Dataset<Row> new
mit beiden Spalten a = log(a)
und b = log(b)
Antworten:
1 für die Antwort № 1Sie können eine Methode erstellen, die den Wert a [Spalte] und b [Spalte] als Parameter annimmt und den Protokollwert zurückgibt.
Angenommen, Spalte a und Spalte b sind vom Typ long
public long getLog(long value){
// yourlogic to generate log
}
Wenden Sie dann die Kartenfunktion auf den Datensatz an. Unter Kartenfunktion erhalten Sie einen Wert als Typ Row
die bewerben getLong/getAs()
Methode, um den entsprechenden Wert zu erhalten, dann übergeben Sie diesen Wert an Ihre benutzerdefinierte Log-Compute-Methode, d.h. getLog
In unserem Fall geben Sie dann den resultierenden Wert zurück.
Sie müssen möglicherweise zurückkehren Tuple2
für beide Werte a und b Spalte
Oder Sie können erstellen udf
Benutzer definieren Funktion von spqrk sql dann anwenden withcoumn
anzuwendende Methode udf
HINWEIS udf wird den Wert des Typs a [Spalte] und b [Spalte] als Argument annehmen und den Protokollwert zurückgeben.
Hoffe, das funktioniert gut