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?
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%Tags und Links scala apache-spark spark-dataframe apache-spark-sql