Edited at

Azure Data Lake AnalyticsでPython UDFを使う

More than 1 year has passed since last update.

Azure DataLake AnalyticsではU-SQLを用いたメインプロセスからC#,Python,RのUDFが呼べます。PythonのUDFを使う場合には以下の配慮が必要でした。


Azure Data Lake Analytics アカウントに Python 拡張機能をインストールする

以下のページのように、Azureポータルから拡張をアクティベートする必要があります。

チュートリアル: Python を使用して U-SQL の拡張を始める


Visual Studio にて対象となるpython UDOコードを記述

特に名称に規則はないようですが、VSのメニューからAdd UDOをすると、***.usql.pyというテンプレートが生成されるのでこれを記述します。

image.png

このファイル名を途中で変えても、VSのプロジェクト設定には反映されませんでしたので、ファイル名は最初から考えて記述するか、手動でVSプロジェクトファイルを同期する必要があります。

コードは以下のようにpandas DataFrameを入力、出力にする形で記述すればよいです。

出力されるデータフレームの型はデシリアライズされる側で有効になり、スキーマが必要になりますので、どのような型で出力されるかを予想して把握する必要があります。

def get_mentions(tweet):

return ';'.join( ( w[1:] for w in tweet.split() if w[0]=='@' ) )

def usqlml_main(df):
del df['time']
del df['author']
df['mentions'] = df.tweet.apply(get_mentions)
del df['tweet']
return df

pandasやnumpyなどはビルトインされていますが、独自ライブラリをimportするにはアーカイブしたものを転送しておく必要があります。

短いコードならコードごと貼り付けちゃえばいいですけどね。


python UDOコードをビルド

User Defined Objectを記述し、ビルドする必要があります。実際この機能はホストのusqlコードに以下のインライン変数を定義するだけのようです。

DECLARE @pyfunction string = @"..."


pythonのデバッグ

U-SQLでUDOを実行した場合、pythonのエラーメッセージを見ることは可能です。

ですが、細かい問題を修正するには向かないので、pythonコードは他所で十分テストされたものを利用することをお勧めします。