Aan de slagGa gratis aan de slag

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:

  1. Zorg dat de getransformeerde data uit niet-lege vectoren bestaat.
  2. 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

Cursus bekijken

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 '', ____())
Code bewerken en uitvoeren