日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

PyODPS DataFrame:统一的数据查询语言

發(fā)布時(shí)間:2024/8/23 编程问答 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PyODPS DataFrame:统一的数据查询语言 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

摘要: 前幾天,PyODPS發(fā)布了0.7版本,這篇文章給大家介紹下PyODPS新版本帶來(lái)的重要特性。 之前也有若干篇文章介紹過(guò)了,我們PyODPS DataFrame是延遲執(zhí)行的,在調(diào)用立即執(zhí)行的方法,比如execute、persist等之前,都只是構(gòu)建了表達(dá)式。

點(diǎn)此查看原文:http://click.aliyun.com/m/41051/

前幾天,PyODPS發(fā)布了0.7版本,這篇文章給大家介紹下PyODPS新版本帶來(lái)的重要特性。

之前也有若干篇文章介紹過(guò)了,我們PyODPS DataFrame是延遲執(zhí)行的,在調(diào)用立即執(zhí)行的方法,比如execute、persist等之前,都只是構(gòu)建了表達(dá)式。而真正的執(zhí)行根據(jù)具體的輸入數(shù)據(jù),來(lái)決定執(zhí)行的后端。

比如,我們可以根據(jù)輸入是pandas DataFrame(本地?cái)?shù)據(jù)),還是MaxCompute Table(MaxCompute數(shù)據(jù))來(lái)決定是在本地執(zhí)行,還是在MaxComput上執(zhí)行。

In [1]: import pandas as pdIn [2]: pd_df = pd.DataFrame({'a': range(3)})In [3]: from odps.df import DataFrameIn [4]: df = DataFrame(pd_df) # 本地?cái)?shù)據(jù)In [5]: df.a.sum() |==========================================| 1 / 1 (100.00%) 0s 3In [6]: %load_ext odpsIn [7]: %enter Out[7]: <odps.inter.Room at 0x105951990>In [8]: df = DataFrame(o.get_table('pyodps_iris')) # MaxCompute數(shù)據(jù)In [9]: df.sepal_width.sum() |==========================================| 1 / 1 (100.00%) 15s 458.10000000000014

數(shù)據(jù)庫(kù)執(zhí)行

來(lái)到了0.7版本,我們的后端武器庫(kù)進(jìn)一步擴(kuò)充,現(xiàn)在我們支持Postgresql和MySQL,原則上我們支持所有的主流數(shù)據(jù)庫(kù),但我們只在這兩個(gè)數(shù)據(jù)庫(kù)上做了測(cè)試。

我們的數(shù)據(jù)庫(kù)執(zhí)行后端使用 sqlalchemy 實(shí)現(xiàn),想要執(zhí)行還需要對(duì)應(yīng)數(shù)據(jù)庫(kù)的driver。

現(xiàn)在,如果DataFrame輸入的數(shù)據(jù)是sqlalchemy Table,那么我們就可以使用數(shù)據(jù)庫(kù)后端來(lái)執(zhí)行。

In [24]: mysql_engine = sqlalchemy.create_engine('mysql://root:123@localhost/movielens') In [25]: metadata = sqlalchemy.MetaData(bind=mysql_engine) # 需要綁定engineIn [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

對(duì)于postgresql也是一樣。 值得注意的是,現(xiàn)在還有部分DataFrame操作,比如自定義函數(shù)尚未支持?jǐn)?shù)據(jù)庫(kù)后端

可以看到,PyODPS DataFrame就是一個(gè)統(tǒng)一的數(shù)據(jù)查詢語(yǔ)言,用戶不需要改寫一行代碼,就可以根據(jù)輸入讓數(shù)據(jù)在MaxCompute、本地和數(shù)據(jù)庫(kù)上執(zhí)行,由于DataFrame框架的靈活性,我們甚至還可以擴(kuò)展出非SQL執(zhí)行后端的支持。

JOIN或者UNION數(shù)據(jù)庫(kù)和MaxCompute數(shù)據(jù)

過(guò)去 一篇文章 提到過(guò),我們可以join或者union本地和MaxCompute上的數(shù)據(jù),這樣的典型場(chǎng)景就是,比如我有個(gè)本地excel文件,我可以輕松讀取成本地DataFrame,然后直接就可以和MaxCompute數(shù)據(jù)進(jìn)行操作,省去了一大堆麻煩的過(guò)程。

現(xiàn)在,我們也同樣可以join 數(shù)據(jù)庫(kù)和MaxCompute上的數(shù)據(jù),試想,有一堆用戶數(shù)據(jù)是在數(shù)據(jù)庫(kù)中進(jìn)行處理,然后我們無(wú)需經(jīng)過(guò)同步數(shù)據(jù)等繁瑣的過(guò)程,我們就可以直接join 數(shù)據(jù)庫(kù)和MaxCompute上的數(shù)據(jù),這是何其方便的事情。

比如:

In [29]: ratings = o.get_table('movielens_ratings').to_df()In [32]: female_top_users = top_users[top_users.sex == 'F'] # MySQL中的數(shù)據(jù)In [33]: ratings.join(female_top_users).rating.mean() |==========================================| 1 / 1 (100.00%) 14s 2.9451170298627924

總結(jié)

我們PyODPS一直處在快速迭代的過(guò)程中,我們所有所做的努力,都是為了讓大家以更好的體驗(yàn)來(lái)進(jìn)行數(shù)據(jù)分析和機(jī)器學(xué)習(xí)。盡管我們很努力,但精力畢竟有限,難免會(huì)有bug,會(huì)有功能不完善。希望大家能給我們提issue,能貢獻(xiàn)代碼就更好啦。

項(xiàng)目文檔:http://pyodps.readthedocs.io
項(xiàng)目地址:https://github.com/aliyun/aliyun-odps-python-sdk
提issue:https://github.com/aliyun/aliyun-odps-python-sdk/issues

釘釘掃碼:

總結(jié)

以上是生活随笔為你收集整理的PyODPS DataFrame:统一的数据查询语言的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。