始める無料で始める

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. 変換後のデータが空でないベクトルで構成されるようにします。
  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 '', ____())
コードを編集して実行