摘要:編寫完成后,將代碼保存為,并在中執(zhí)行此后創(chuàng)建函數(shù)。執(zhí)行創(chuàng)建后,便可以在中執(zhí)行查詢暫不支持,因而需禁用其他如果包依賴了其他包,需要一并上傳并同時(shí)加入到依賴中。
摘要: 新版 MaxCompute Isolation Session 支持 Python UDF。也就是說,Python UDF 中已經(jīng)可以跑二進(jìn)制包。剛才以 Scipy 為例踩了一下坑,把相關(guān)的過程分享出來。
新版 MaxCompute Isolation Session 支持 Python UDF。也就是說,Python UDF 中已經(jīng)可以跑二進(jìn)制包。剛才以 Scipy 為例踩了一下坑,把相關(guān)的過程分享出來。
下載 Scipy 包并上傳資源
首先,從 PyPI 或其他鏡像下載 Scipy 包。你需要下載后綴為“cp27-cp27m-manylinux1_x86_64.whl”的包,其他的包會(huì)無法加載,包括名為“cp27-cp27mu”的包。以下的截圖來自 https://pypi.python.org/pypi/... ,僅有打勾的包可以直接使用:
下載 whl 后,將文件名更改為 scipy.zip。此后,在 MaxCompute Console 中執(zhí)行
add archive scipy.zip;
此后,scipy.zip 即被創(chuàng)建為 MaxCompute Archive 資源。不建議使用其他類型的資源,因?yàn)樵趫?zhí)行時(shí),MaxCompute 會(huì)自動(dòng)解壓 Archive 類型的資源,從而省去手動(dòng)解壓的步驟。
從非 Whl 包生成 Whl 包
如果列出的包中包含 Whl,則可以直接上傳并跳過此步驟。如果列出的包不包含 whl(如手中僅有圖中的 scipy-0.19.0.zip),需要在 Linux 環(huán)境中手動(dòng)編譯并打包為 whl。打包前,需要確保下列命令返回“cp27m”而不是“cp27mu”:
python -c "import pip; print pip.pep425tags.get_abi_tag()"
如果返回值為“cp27mu”,你需要使用 “--enable-unicode=no" 選項(xiàng)編譯一個(gè)可用的 Python 2.7,再使用編譯得到的 Python。如果返回值正確,通常可以在該環(huán)境下使用
python setup.py bdist_wheel
完成,具體請(qǐng)參考各個(gè)包的編譯/安裝說明。
打包完成后,將生成的 whl 包上傳。
編寫和創(chuàng)建 UDF
我們需要編寫一個(gè) UDF 支持計(jì)算 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 這個(gè)函數(shù)。get_cache_archive 返回一個(gè)包含包中所有文件的文件對(duì)象。我們首先取出所有的文件名,此后獲得最短的路徑作為包的路徑,并加入 sys.path。此后,便可以正常 import scipy 這個(gè)包。
需要注意的是,因?yàn)?MaxCompute 會(huì)在執(zhí)行前通過原有的沙箱檢查 UDF 的輸入/輸出,因而 include_package_path 和 import 在函數(shù)外調(diào)用會(huì)報(bào)錯(cuò)。
編寫完成后,將代碼保存為 my_psi.py,并在 MaxCompute Console 中執(zhí)行
add py my_psi.py;
此后創(chuàng)建函數(shù)。在 MaxCompute Console 中輸入
create function my_psi as my_psi.MyPsi using my_psi.py,scipy.zip;
注意在 create function 時(shí),不要忘記加上剛才上傳的包,例如上面的 scipy.zip。
執(zhí)行
創(chuàng)建 UDF 后,便可以在 MaxCompute Console 中執(zhí)行查詢(暫不支持 pypy,因而需禁用 pypy):
set odps.pypy.enabled=false; set odps.isolation.session.enable = true; select my_psi(sepal_length) from iris;
其他
如果包依賴了其他 Python 包,需要一并上傳并同時(shí)加入到 UDF 依賴中。
使用 0.7.4 以上的 PyODPS DataFrame 可以簡(jiǎn)化使用二進(jìn)制包的 UDF 的編寫,無需手動(dòng)調(diào)用 include_package_path,具體可見 http://pyodps.readthedocs.io/... 。
原文鏈接
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41748.html
摘要:摘要北京云棲大會(huì)上阿里云發(fā)布了最新的功能,萬眾期待的功能終于支持啦,我怎么能不一試為快,今天就分享如何通過進(jìn)行開發(fā)。注冊(cè)函數(shù)在腳本中編輯試用好了,一個(gè)簡(jiǎn)單完整的通過開發(fā)實(shí)踐分享完成。 摘要: 2017/12/20 北京云棲大會(huì)上阿里云MaxCompute發(fā)布了最新的功能Python UDF,萬眾期待的功能終于支持啦,我怎么能不一試為快,今天就分享如何通過Studio進(jìn)行Python u...
摘要:摘要在年云棲大會(huì)北京峰會(huì)的大數(shù)據(jù)專場(chǎng)中,來自阿里云的高級(jí)技術(shù)專家李雪峰帶來了主題為金融級(jí)別大數(shù)據(jù)平臺(tái)的多租戶隔離實(shí)踐的演講。三是運(yùn)行隔離機(jī)制。針對(duì)這一問題,提供了多層隔離嵌套方案以便規(guī)避這種潛在的安全風(fēng)險(xiǎn)。 摘要:在2017年云棲大會(huì)?北京峰會(huì)的大數(shù)據(jù)專場(chǎng)中,來自阿里云的高級(jí)技術(shù)專家李雪峰帶來了主題為《金融級(jí)別大數(shù)據(jù)平臺(tái)的多租戶隔離實(shí)踐》的演講。在分享中,李雪峰首先介紹了基于傳統(tǒng)Iaa...
摘要:中使用首先,我們需要寫一個(gè)文件,假設(shè)我們就是把某一列按格式放的一列轉(zhuǎn)成格式。這里我們指定了函數(shù)名叫,主類使我們上傳的文件里的類?,F(xiàn)在我們就可以在中調(diào)用這個(gè)了。這樣我們就完成了在中使用的整個(gè)過程。 摘要: PyODPS 中使用 Python UDF 包含兩方面,一個(gè)是直接使用,也就是在 MaxCompute SQL 中使用;一個(gè)是間接的方式,也就是 PyODPS DataFrame,這種...
閱讀 1293·2019-08-30 12:49
閱讀 3163·2019-08-28 18:14
閱讀 840·2019-08-26 11:38
閱讀 1701·2019-08-23 18:23
閱讀 2840·2019-08-23 17:04
閱讀 522·2019-08-23 16:52
閱讀 4064·2019-08-23 16:43
閱讀 2789·2019-08-23 16:12