UDF erstellen üben
Manchmal braucht deine Datentransformation etwas, das die eingebauten Funktionen nicht unterstützen. Dann ist eine eigene User Defined Function ("UDF") sinnvoll.
Die SQL-Funktion udf steht zur Verfügung.
Ein DataFrame df2 ist verfügbar, vom Typ DataFrame[doc: array<string>, in: array<string>, out: array<string>]. Die Spalte doc enthält triviale Tokens.
Folgendes zeigt die ersten 20 Zeilen von df2, in denen doc die '1' enthält:
df2.where(array_contains('doc','1')).show()
Du hast zwei Ziele zu erfüllen:
- Stelle sicher, dass die transformierten Daten aus nichtleeren Vektoren bestehen.
- Ein DataFrame hat eine Spalte mit Arrays aus Strings, wobei jedes Array genau ein Element enthält. Diese Spalte soll in einen String umgewandelt werden.
Diese Übung ist Teil des Kurses
Einführung in Spark SQL mit Python
Anleitung zur Übung
- Erstelle eine UDF, die genau dann true zurückgibt, wenn der Wert ein nichtleerer Vektor ist, und verwende dafür
numNonzeros(). - Erstelle eine UDF, die das erste Element des Arrays zurückgibt und dessen String-Darstellung liefert.
Interaktive Übung
Vervollständige den Beispielcode, um diese Übung erfolgreich abzuschließen.
# Returns true if the value is a nonempty vector
nonempty_udf = udf(lambda x:
True if (x and hasattr(x, "toArray") and x.____())
else False, ____())
# Returns first element of the array as string
s_udf = udf(lambda x: ____(x[0]) if (x and type(x) is list and len(x) > 0)
else '', ____())