Öva på att skapa en UDF
Ibland behöver dina data en transformation som inte stöds av inbyggda funktioner. Då är en egendefinerad funktion ("UDF") ett bra alternativ.
SQL-funktionen udf finns tillgänglig.
En dataram df2 av typen DataFrame[doc: array<string>, in: array<string>, out: array<string>] är tillgänglig. Kolumnen doc innehåller enkla token.
Följande visar de första 20 raderna i df2 där doc innehåller '1':
df2.where(array_contains('doc','1')).show()
Du har två mål att uppfylla:
- Se till att de transformerade data består av icke-tomma vektorer.
- En dataram har en kolumn som innehåller strängarrayer, där varje array har ett enda element. Du vill omvandla den här kolumnen till en sträng.
Den här övningen är en del av kursen
Introduktion till Spark SQL i Python
Övningsinstruktioner
- Skapa en udf som returnerar true om och endast om värdet är en icke-tom vektor, med hjälp av
numNonzeros() - Skapa en udf som returnerar det första elementet i arrayen och returnerar dess strängrepresentation.
Interaktiv övning med praktiskt arbete
Testa den här övningen genom att slutföra den här exempelkoden.
# 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 '', ____())