摘要:而真正的执行根据具体的输入数据,来决定执行的后端。可以看到,就是一个统一的数据查询语言,用户不需要改写一行代码,就可以根据输入让数据在本地和数据库上执行,由于框架的灵活性,我们甚至还可以扩展出非执行后端的支持。
摘要: 前几天,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...
钉钉扫码:
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41310.html
摘要:而真正的执行根据具体的输入数据,来决定执行的后端。可以看到,就是一个统一的数据查询语言,用户不需要改写一行代码,就可以根据输入让数据在本地和数据库上执行,由于框架的灵活性,我们甚至还可以扩展出非执行后端的支持。 摘要: 前几天,PyODPS发布了0.7版本,这篇文章给大家介绍下PyODPS新版本带来的重要特性。 之前也有若干篇文章介绍过了,我们PyODPS DataFrame是延迟执行...
摘要:摘要支持用来对对象进行操作,它提供了来用类似的接口进行大规模数据分析以及预处理,并且可以用模块来执行机器学习算法。现在为了让大家能更好地使用,我们总结开发过程中的最佳实践,来让大家更高效地开发程序。 摘要: PyODPS支持用 Python 来对 MaxCompute 对象进行操作,它提供了 DataFrame API 来用类似 pandas 的接口进行大规模数据分析以及预处理,并且可...
摘要:中使用首先,我们需要写一个文件,假设我们就是把某一列按格式放的一列转成格式。这里我们指定了函数名叫,主类使我们上传的文件里的类。现在我们就可以在中调用这个了。这样我们就完成了在中使用的整个过程。 摘要: PyODPS 中使用 Python UDF 包含两方面,一个是直接使用,也就是在 MaxCompute SQL 中使用;一个是间接的方式,也就是 PyODPS DataFrame,这种...
阅读 1728·2021-09-23 11:34
阅读 2423·2021-09-22 15:45
阅读 12569·2021-09-22 15:07
阅读 2167·2021-09-02 15:40
阅读 4059·2021-07-29 14:48
阅读 1034·2019-08-30 15:55
阅读 3218·2019-08-30 15:55
阅读 2169·2019-08-30 15:55