練習建立 UDF
有時候內建函式不支援你需要的轉換,這時就適合使用自訂的使用者定義函式(「UDF」)。
已提供 SQL 函式 udf。
已提供資料框 df2,型別為 DataFrame[doc: array<string>, in: array<string>, out: array<string>]。其中的 doc 欄包含簡單的權杖(tokens)。
以下程式會顯示 doc 含有 '1' 的前 20 列:
df2.where(array_contains('doc','1')).show()
你有兩個目標要完成:
- 確保轉換後的資料由非空向量組成。
- 某個資料框有一個欄位包含字串陣列,而且每個陣列都只有一個元素。你想把這個欄位轉換為字串。
本練習屬於課程
Python Spark SQL 入門
練習說明
- 建立一個 udf,只有在值為非空向量時才回傳 true,並使用
numNonzeros()。 - 建立一個 udf,回傳陣列的第一個元素,並回傳其字串表示。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# 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 '', ____())