本文以在MaxCompute用戶端操作為例,為您介紹如何通過Python UDF引用檔案資源。
前提條件
請確認您已完成如下操作:
已安裝並配置MaxCompute用戶端。
更多安裝並配置MaxCompute用戶端資訊,請參見安裝並配置MaxCompute用戶端。
已將待引用的檔案添加為MaxCompute專案中的資源。
代碼開發和使用步驟
1. 代碼開發
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)
將上述程式碼範例儲存為PY指令檔(例如file.py),並放置在MaxCompute用戶端的bin目錄中。
2. 上傳資源和註冊函數
完成UDF代碼開發和調試之後,在MaxCompute用戶端中將資源上傳至MaxCompute並註冊函數。
執行如下命令,將PY指令檔上傳為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.
更多註冊函數資訊,請參見註冊函數。
3. 使用樣本
成功註冊UDF後,執行以下命令,構造測試資料並調用註冊的函數。
--建立測試表。
create table file_table (arg bigint);
--插入資料。
insert into file_table values (1), (4), (15), (123), (7995);
--在SQL語句中調用新註冊的函數,返迴文件資源中滿足要求的資料。
select file_udf(arg) from file_table;
返回結果如下。
+-----+
| _c0 |
+-----+
| a |
| d |
| NULL |
| NULL |
| NULL |
+-----+