UDF 作成の練習
組み込み関数では対応できない変換が必要になることがあります。そんなときに有効なのがユーザー定義関数("UDF")です。
SQL 関数 udf が利用できます。
DataFrame[doc: array<string>, in: array<string>, out: array<string>] 型のデータフレーム df2 が用意されています。doc 列には単純なトークンが入っています。
次のコードは、doc に '1' を含む df2 の先頭 20 行を表示します。
df2.where(array_contains('doc','1')).show()
次の2つの目標を達成してください。
- 変換後のデータが空でないベクトルで構成されるようにします。
- 文字列の配列を含む列があり、各配列には要素が1つだけ入っています。この列を文字列に変換したいです。
この演習はコースの一部です
Pythonで学ぶ Spark SQL 入門
演習の手順
numNonzeros()を使って、値が空でないベクトルのときに限って true を返す udf を作成します。- 配列の最初の要素を取り出し、その文字列表現を返す 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 '', ____())