Wie benutzt man orderby () in absteigender Reihenfolge in Spark-Funktionen?

8

Ich brauche eine Fensterfunktion, die durch einige Schlüssel (= Spaltennamen) partitioniert, nach einem anderen Spaltennamen sortiert und die Zeilen mit den obersten x-Rängen zurückgibt.

Dies funktioniert in aufsteigender Reihenfolge:

%Vor%

Aber wenn ich versuche, in Zeile 4 in orderBy(desc(top_value)) oder orderBy(top_value.desc) zu ändern, bekomme ich einen Syntaxfehler. Was ist die korrekte Syntax hier?

    
Malte 25.07.2016, 16:21
quelle

1 Antwort

16

Es gibt zwei Versionen von orderBy , eine, die mit Strings arbeitet und eine, die mit Column Objekten arbeitet ( API ). Ihr Code verwendet die erste Version, bei der die Sortierreihenfolge nicht geändert werden kann. Sie müssen zur Spaltenversion wechseln und dann die Methode desc aufrufen, z. B. myCol.desc .

Jetzt kommen wir in das API-Design-Territorium. Der Vorteil der Übergabe von Column -Parametern ist, dass Sie viel mehr Flexibilität haben, zB können Sie Ausdrücke usw. verwenden. Wenn Sie eine API pflegen möchten, die eine Zeichenkette anstelle von Column akzeptiert, müssen Sie konvertieren die Zeichenfolge zu einer Spalte. Es gibt mehrere Möglichkeiten, dies zu tun, und am einfachsten ist es, org.apache.spark.sql.functions.col(myColName) zu verwenden.

Wenn wir alles zusammenfügen, bekommen wir

%Vor%     
Sim 25.07.2016, 18:44
quelle