全部產品
Search
文件中心

MaxCompute:UDF樣本:引用檔案資源

更新時間:Jun 19, 2024

本文以在MaxCompute用戶端操作為例,為您介紹如何通過Python UDF引用檔案資源。

前提條件

請確認您已完成如下操作:

  • 已安裝並配置MaxCompute用戶端。

    更多安裝並配置MaxCompute用戶端資訊,請參見安裝並配置MaxCompute用戶端

  • 已將待引用的檔案添加為MaxCompute專案中的資源。

    本文已添加的檔案資源樣本為test_distcache.txt,包含的資料如下。

    1 a
    2 b
    3 c
    4 d

    更多添加資源操作,請參見添加資源

代碼開發和使用步驟

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並註冊函數。

  1. 執行如下命令,將PY指令檔上傳為MaxCompute資源。

    add py file.py;

    返回結果如下。

    OK: Resource 'file.py' have been created.

    更多添加資源命令資訊,請參見添加資源

  2. 執行如下命令,註冊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 |
+-----+