摘要:而真正的執行根據具體的輸入數據,來決定執行的后端。可以看到,就是一個統一的數據查詢語言,用戶不需要改寫一行代碼,就可以根據輸入讓數據在本地和數據庫上執行,由于框架的靈活性,我們甚至還可以擴展出非執行后端的支持。
摘要: 前幾天,PyODPS發布了0.7版本,這篇文章給大家介紹下PyODPS新版本帶來的重要特性。 之前也有若干篇文章介紹過了,我們PyODPS DataFrame是延遲執行的,在調用立即執行的方法,比如execute、persist等之前,都只是構建了表達式。
點此查看原文:http://click.aliyun.com/m/41051/
前幾天,PyODPS發布了0.7版本,這篇文章給大家介紹下PyODPS新版本帶來的重要特性。
之前也有若干篇文章介紹過了,我們PyODPS DataFrame是延遲執行的,在調用立即執行的方法,比如execute、persist等之前,都只是構建了表達式。而真正的執行根據具體的輸入數據,來決定執行的后端。
比如,我們可以根據輸入是pandas DataFrame(本地數據),還是MaxCompute Table(MaxCompute數據)來決定是在本地執行,還是在MaxComput上執行。
In [1]: import pandas as pd In [2]: pd_df = pd.DataFrame({"a": range(3)}) In [3]: from odps.df import DataFrame In [4]: df = DataFrame(pd_df) # 本地數據 In [5]: df.a.sum() |==========================================| 1 / 1 (100.00%) 0s 3 In [6]: %load_ext odps In [7]: %enter Out[7]:In [8]: df = DataFrame(o.get_table("pyodps_iris")) # MaxCompute數據 In [9]: df.sepal_width.sum() |==========================================| 1 / 1 (100.00%) 15s 458.10000000000014
數據庫執行
來到了0.7版本,我們的后端武器庫進一步擴充,現在我們支持Postgresql和MySQL,原則上我們支持所有的主流數據庫,但我們只在這兩個數據庫上做了測試。
我們的數據庫執行后端使用 sqlalchemy 實現,想要執行還需要對應數據庫的driver。
現在,如果DataFrame輸入的數據是sqlalchemy Table,那么我們就可以使用數據庫后端來執行。
In [24]: mysql_engine = sqlalchemy.create_engine("mysql://root:123@localhost/movielens") In [25]: metadata = sqlalchemy.MetaData(bind=mysql_engine) # 需要綁定engine In [26]: table = sqlalchemy.Table("top_users", metadata, extend_existing=True, autoload=True) In [27]: top_users = DataFrame(table) In [28]: top_users.age.sum() |==========================================| 1 / 1 (100.00%) 0s 763
對于postgresql也是一樣。 值得注意的是,現在還有部分DataFrame操作,比如自定義函數尚未支持數據庫后端 。
可以看到,PyODPS DataFrame就是一個統一的數據查詢語言,用戶不需要改寫一行代碼,就可以根據輸入讓數據在MaxCompute、本地和數據庫上執行,由于DataFrame框架的靈活性,我們甚至還可以擴展出非SQL執行后端的支持。
JOIN或者UNION數據庫和MaxCompute數據
過去 一篇文章 提到過,我們可以join或者union本地和MaxCompute上的數據,這樣的典型場景就是,比如我有個本地excel文件,我可以輕松讀取成本地DataFrame,然后直接就可以和MaxCompute數據進行操作,省去了一大堆麻煩的過程。
現在,我們也同樣可以join 數據庫和MaxCompute上的數據,試想,有一堆用戶數據是在數據庫中進行處理,然后我們無需經過同步數據等繁瑣的過程,我們就可以直接join 數據庫和MaxCompute上的數據,這是何其方便的事情。
比如:
In [29]: ratings = o.get_table("movielens_ratings").to_df() In [32]: female_top_users = top_users[top_users.sex == "F"] # MySQL中的數據 In [33]: ratings.join(female_top_users).rating.mean() |==========================================| 1 / 1 (100.00%) 14s 2.9451170298627924
總結
我們PyODPS一直處在快速迭代的過程中,我們所有所做的努力,都是為了讓大家以更好的體驗來進行數據分析和機器學習。盡管我們很努力,但精力畢竟有限,難免會有bug,會有功能不完善。希望大家能給我們提issue,能貢獻代碼就更好啦。
項目文檔:http://pyodps.readthedocs.io
項目地址:https://github.com/aliyun/ali...
提issue:https://github.com/aliyun/ali...
釘釘掃碼:
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41310.html
摘要:而真正的執行根據具體的輸入數據,來決定執行的后端。可以看到,就是一個統一的數據查詢語言,用戶不需要改寫一行代碼,就可以根據輸入讓數據在本地和數據庫上執行,由于框架的靈活性,我們甚至還可以擴展出非執行后端的支持。 摘要: 前幾天,PyODPS發布了0.7版本,這篇文章給大家介紹下PyODPS新版本帶來的重要特性。 之前也有若干篇文章介紹過了,我們PyODPS DataFrame是延遲執行...
摘要:摘要支持用來對對象進行操作,它提供了來用類似的接口進行大規模數據分析以及預處理,并且可以用模塊來執行機器學習算法。現在為了讓大家能更好地使用,我們總結開發過程中的最佳實踐,來讓大家更高效地開發程序。 摘要: PyODPS支持用 Python 來對 MaxCompute 對象進行操作,它提供了 DataFrame API 來用類似 pandas 的接口進行大規模數據分析以及預處理,并且可...
摘要:中使用首先,我們需要寫一個文件,假設我們就是把某一列按格式放的一列轉成格式。這里我們指定了函數名叫,主類使我們上傳的文件里的類。現在我們就可以在中調用這個了。這樣我們就完成了在中使用的整個過程。 摘要: PyODPS 中使用 Python UDF 包含兩方面,一個是直接使用,也就是在 MaxCompute SQL 中使用;一個是間接的方式,也就是 PyODPS DataFrame,這種...
閱讀 1751·2021-09-23 11:34
閱讀 2472·2021-09-22 15:45
閱讀 12821·2021-09-22 15:07
閱讀 2221·2021-09-02 15:40
閱讀 4107·2021-07-29 14:48
閱讀 1071·2019-08-30 15:55
閱讀 3245·2019-08-30 15:55
閱讀 2190·2019-08-30 15:55