摘要:編寫完成后,將代碼保存為,并在中執行此后創建函數。執行創建后,便可以在中執行查詢暫不支持,因而需禁用其他如果包依賴了其他包,需要一并上傳并同時加入到依賴中。
摘要: 新版 MaxCompute Isolation Session 支持 Python UDF。也就是說,Python UDF 中已經可以跑二進制包。剛才以 Scipy 為例踩了一下坑,把相關的過程分享出來。
新版 MaxCompute Isolation Session 支持 Python UDF。也就是說,Python UDF 中已經可以跑二進制包。剛才以 Scipy 為例踩了一下坑,把相關的過程分享出來。
下載 Scipy 包并上傳資源
首先,從 PyPI 或其他鏡像下載 Scipy 包。你需要下載后綴為“cp27-cp27m-manylinux1_x86_64.whl”的包,其他的包會無法加載,包括名為“cp27-cp27mu”的包。以下的截圖來自 https://pypi.python.org/pypi/... ,僅有打勾的包可以直接使用:
下載 whl 后,將文件名更改為 scipy.zip。此后,在 MaxCompute Console 中執行
add archive scipy.zip;
此后,scipy.zip 即被創建為 MaxCompute Archive 資源。不建議使用其他類型的資源,因為在執行時,MaxCompute 會自動解壓 Archive 類型的資源,從而省去手動解壓的步驟。
從非 Whl 包生成 Whl 包
如果列出的包中包含 Whl,則可以直接上傳并跳過此步驟。如果列出的包不包含 whl(如手中僅有圖中的 scipy-0.19.0.zip),需要在 Linux 環境中手動編譯并打包為 whl。打包前,需要確保下列命令返回“cp27m”而不是“cp27mu”:
python -c "import pip; print pip.pep425tags.get_abi_tag()"
如果返回值為“cp27mu”,你需要使用 “--enable-unicode=no" 選項編譯一個可用的 Python 2.7,再使用編譯得到的 Python。如果返回值正確,通常可以在該環境下使用
python setup.py bdist_wheel
完成,具體請參考各個包的編譯/安裝說明。
打包完成后,將生成的 whl 包上傳。
編寫和創建 UDF
我們需要編寫一個 UDF 支持計算 psi。編寫下列代碼:
from odps.udf import annotate from odps.distcache import get_cache_archive def include_package_path(res_name): import os, sys archive_files = get_cache_archive(res_name) dir_names = sorted([os.path.dirname(os.path.normpath(f.name)) for f in archive_files if ".dist_info" not in f.name], key=lambda v: len(v)) sys.path.append(os.path.dirname(dir_names[0])) @annotate("double->double") class MyPsi(object): def __init__(self): include_package_path("scipy.zip") def evaluate(self, arg0): from scipy.special import psi return float(psi(arg0))
這里有必要解釋一下 include_package_path 這個函數。get_cache_archive 返回一個包含包中所有文件的文件對象。我們首先取出所有的文件名,此后獲得最短的路徑作為包的路徑,并加入 sys.path。此后,便可以正常 import scipy 這個包。
需要注意的是,因為 MaxCompute 會在執行前通過原有的沙箱檢查 UDF 的輸入/輸出,因而 include_package_path 和 import 在函數外調用會報錯。
編寫完成后,將代碼保存為 my_psi.py,并在 MaxCompute Console 中執行
add py my_psi.py;
此后創建函數。在 MaxCompute Console 中輸入
create function my_psi as my_psi.MyPsi using my_psi.py,scipy.zip;
注意在 create function 時,不要忘記加上剛才上傳的包,例如上面的 scipy.zip。
執行
創建 UDF 后,便可以在 MaxCompute Console 中執行查詢(暫不支持 pypy,因而需禁用 pypy):
set odps.pypy.enabled=false; set odps.isolation.session.enable = true; select my_psi(sepal_length) from iris;
其他
如果包依賴了其他 Python 包,需要一并上傳并同時加入到 UDF 依賴中。
使用 0.7.4 以上的 PyODPS DataFrame 可以簡化使用二進制包的 UDF 的編寫,無需手動調用 include_package_path,具體可見 http://pyodps.readthedocs.io/... 。
原文鏈接
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/41748.html
摘要:摘要北京云棲大會上阿里云發布了最新的功能,萬眾期待的功能終于支持啦,我怎么能不一試為快,今天就分享如何通過進行開發。注冊函數在腳本中編輯試用好了,一個簡單完整的通過開發實踐分享完成。 摘要: 2017/12/20 北京云棲大會上阿里云MaxCompute發布了最新的功能Python UDF,萬眾期待的功能終于支持啦,我怎么能不一試為快,今天就分享如何通過Studio進行Python u...
摘要:摘要在年云棲大會北京峰會的大數據專場中,來自阿里云的高級技術專家李雪峰帶來了主題為金融級別大數據平臺的多租戶隔離實踐的演講。三是運行隔離機制。針對這一問題,提供了多層隔離嵌套方案以便規避這種潛在的安全風險。 摘要:在2017年云棲大會?北京峰會的大數據專場中,來自阿里云的高級技術專家李雪峰帶來了主題為《金融級別大數據平臺的多租戶隔離實踐》的演講。在分享中,李雪峰首先介紹了基于傳統Iaa...
摘要:中使用首先,我們需要寫一個文件,假設我們就是把某一列按格式放的一列轉成格式。這里我們指定了函數名叫,主類使我們上傳的文件里的類。現在我們就可以在中調用這個了。這樣我們就完成了在中使用的整個過程。 摘要: PyODPS 中使用 Python UDF 包含兩方面,一個是直接使用,也就是在 MaxCompute SQL 中使用;一個是間接的方式,也就是 PyODPS DataFrame,這種...
閱讀 1269·2019-08-30 12:49
閱讀 3112·2019-08-28 18:14
閱讀 821·2019-08-26 11:38
閱讀 1676·2019-08-23 18:23
閱讀 2822·2019-08-23 17:04
閱讀 500·2019-08-23 16:52
閱讀 4018·2019-08-23 16:43
閱讀 2769·2019-08-23 16:12