/ / Transformationen auf Dataset Apache Spark anwenden - Java, Apache-Spark, Spark-Dataframe

Anwenden von Transformationen auf Dataset Apache Spark - Java, Apache-Spark, Spark-Dataframe

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 № 1

Sie 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