Oefenen met het maken van een UDF
Soms heeft je data een transformatie nodig die niet wordt ondersteund door ingebouwde functies. Dan is een eigen user defined function ("UDF") geschikt.
De SQL-functie udf is beschikbaar.
Er is een dataframe df2 beschikbaar, van het type DataFrame[doc: array<string>, in: array<string>, out: array<string>]. De kolom doc bevat triviale tokens.
Het volgende toont de eerste 20 rijen van df2 waarbij doc '1' bevat:
df2.where(array_contains('doc','1')).show()
Je hebt twee doelen te behalen:
- Zorg dat de getransformeerde data uit niet-lege vectoren bestaat.
- Een dataframe heeft een kolom met arrays van strings, waarbij elke array één item bevat. Je wilt deze kolom omzetten naar een string.
Deze oefening maakt deel uit van de cursus
Introductie tot Spark SQL in Python
Oefeninstructies
- Maak een udf die true teruggeeft als en alleen als de waarde een niet-lege vector is, met
numNonzeros() - Maak een udf die het eerste element van de array teruggeeft en daarvan de stringrepresentatie retourneert.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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 '', ____())