2017-01-04 4 views
1

Ich handle mit einem Dataset<Row> in Apache Spark mit Java und muss ein paar mathematische Transformationen über alle Spalten in diesem Datensatz durchführen. Eine der Transformationen besteht im Wesentlichen darin, das Protokoll aller Werte zu erhalten, die in diesem Datensatz gespeichert sind und immer noch Dataset<Row> zurückgeben. Ich sehe klar, wie man das in einer map Funktion in einer RDD macht, aber wie kann ich das in einem Dataset<Row> tun?Anwenden von Transformationen auf Dataset Apache Spark

Kontext: Dataset<Row> old enthält 2 Spalten a und b. Ich möchte ein neues Dataset<Row> new mit beiden Spalten a = log(a) und b = log(b)

+1

Bitte in weiteren Details erklären, was Sie zu tun versuchen, was Sie getan haben, so weit usw. Dataset hat viele Funktionen, die verwendet werden können. –

Antwort

1

zurückzukehren, was Sie tun können, ist eine Methode zu erstellen, die eine [Spalte] und b [Spalte] als Parameterwert vom Typ nimmt und gibt den Log-Wert.

suppose Spalte a und Spalte b sind vom Typ long

public long getLog(long value){ 
// yourlogic to generate log 
} 

dann Map-Funktion über Daten-Set anzuwenden. Unter Kartenfunktion erhalten Sie einen Wert als Typ die Anwendung getLong/getAs() Methode, um den entsprechenden Wert zu erhalten, dann übergeben Sie diesen Wert an Ihre benutzerdefinierte Log-Compute-Methode, d. H. in unserem Fall dann Ergebniswert zurückgeben.

Sie benötigen Tuple2 sowohl Wert a und b Spalte

zurückzukehren Oder Sie können udf Benutzer definieren Funktion spqrk SQL erstellen dann withcoumn Methode anwenden udf

HINWEIS anzuwenden UDF wird Wert annehmen vom Typ a [Spalte] und b [Spalte] als Argument und geben den Protokollwert zurück.

Hoffnung diese Arbeit fein

Verwandte Themen