このトピックでは、MaxComputeクライアントでPythonのユーザー定義関数 (UDF) を使用してファイルリソースを参照する方法について説明します。
前提条件
次の要件が満たされていることを確認してください。
MaxComputeクライアントがインストールされ、設定されます。
MaxComputeクライアントのインストールと設定方法の詳細については、「MaxComputeクライアントのインストールと設定」をご参照ください。
参照するファイルは、リソースとしてMaxComputeプロジェクトに追加されます。
この例では、test_distcache.txtファイルがリソースとしてMaxComputeプロジェクトに追加されます。 ファイルには次のデータが含まれています。
1 a 2 b 3 c 4 dリソースの追加方法の詳細については、「リソースの追加」をご参照ください。
開発と使用手順
1. UDFを書く
次のサンプルコードは、Python UDFを使用して、test_distcache.txtファイルから特定の要件を満たすデータを取得する方法を示しています。
from odps.udf import annotate
from odps.distcache import get_cache_file
@annotate('bigint->string')
class DistCacheExample(object):
def __init__(self):
cache_file = get_cache_file('test_distcache.txt')
kv = {}
for line in cache_file:
line = line.strip()
if not line:
continue
k, v = line.split()
kv[int(k)] = v
cache_file.close()
self.kv = kv
def evaluate(self, arg):
return self.kv.get(arg)上記のサンプルコードをPythonスクリプトとして保存し、MaxComputeクライアントのbinディレクトリにPythonスクリプトを保存します。 この例では、Pythonスクリプトの名前はfile.pyです。
2. リソースのアップロードとUDFの作成
UDFコードを開発およびデバッグした後、MaxComputeクライアントのMaxComputeにリソースをアップロードし、UDFを作成します。
次のコマンドを実行して、PythonスクリプトファイルをリソースとしてMaxComputeに追加します。
add py file.py;次の応答が返されます。
OK: Resource 'file.py' have been created.MaxComputeにリソースを追加するために使用できるコマンドの詳細については、「リソースの追加」をご参照ください。
次のコマンドを実行して、Python UDFを作成します。
create function file_udf as 'file.DistCacheExample' using 'file.py, test_distcache.txt';パラメーターの説明:
file_udf: 作成するPython UDFの名前。 その後、関数はSQL文で呼び出されます。file.DistCacheExample:fileはfile.pyスクリプトの名前です。DistCacheExampleは、file.pyスクリプトで定義されたクラスです。
次の応答が返されます。
Success: Function 'file_udf' have been created.UDFの作成方法の詳細については、「UDFの作成」をご参照ください。
3. UDFを使用するUse the UDF
UDFの作成後、次のコマンドを実行してテストデータを作成し、UDFを呼び出します。
-- Create a test table.
create table file_table (arg bigint);
-- Insert data into the table.
insert into file_table values (1), (4), (15), (123), (7995);
-- Call the created function in the SQL statement to obtain the data that meets the specific requirements from the file resource.
select file_udf(arg) from file_table;次の応答が返されます。
+-----+
| _c0 |
+-----+
| a |
| d |
| NULL |
| NULL |
| NULL |
+-----+